add: anowflake email kafka, refa: redis connectg

This commit is contained in:
wwweww
2026-02-25 01:16:13 +08:00
parent fdbcde13b2
commit 300058ad01
67 changed files with 3596 additions and 139 deletions
-29
View File
@@ -1,29 +0,0 @@
package converter
import (
"app/users/rpc/internal/models"
"app/users/rpc/pb"
)
// UserModelToPb 将 Users Model 转换为 protobuf Users
// 使用通用转换函数,自动处理所有字段
func UserModelToPb(user *models.Users) *pb.Users {
if user == nil {
return nil
}
pbUser := &pb.Users{}
_ = StructToStruct(user, pbUser)
return pbUser
}
// UserModelsToPb 将多个 Users Model 转换为 protobuf Users
// 使用通用转换函数,自动处理所有元素
func UserModelsToPb(users []*models.Users) []*pb.Users {
if len(users) == 0 {
return []*pb.Users{}
}
result, _ := SliceToSlice(users, []*pb.Users{})
return result.([]*pb.Users)
}
+96
View File
@@ -0,0 +1,96 @@
package redisx
import (
"context"
"time"
"github.com/redis/go-redis/v9"
"github.com/zeromicro/go-zero/core/stores/cache"
)
type MasterSlaveCluster struct {
Client *redis.ClusterClient
MasterHost string
SlaveHost string
HasSlave bool
}
func NewMasterSlaveCluster(cacheConf cache.CacheConf) *MasterSlaveCluster {
cacheConf = filterCacheConf(cacheConf)
if len(cacheConf) == 0 {
return &MasterSlaveCluster{}
}
master := cacheConf[0]
slave := cacheConf[0]
hasSlave := len(cacheConf) > 1
if hasSlave {
slave = cacheConf[1]
}
client := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{master.Host},
Username: master.User,
Password: master.Pass,
ReadOnly: hasSlave,
ClusterSlots: func(ctx context.Context) ([]redis.ClusterSlot, error) {
nodes := []redis.ClusterNode{{Addr: master.Host}}
if hasSlave {
nodes = append(nodes, redis.ClusterNode{Addr: slave.Host})
}
return []redis.ClusterSlot{{
Start: 0,
End: 16383,
Nodes: nodes,
}}, nil
},
})
return &MasterSlaveCluster{
Client: client,
MasterHost: master.Host,
SlaveHost: slave.Host,
HasSlave: hasSlave,
}
}
func ConnectMasterSlaveCluster(cacheConf cache.CacheConf, timeout time.Duration) (*MasterSlaveCluster, error) {
cluster := NewMasterSlaveCluster(cacheConf)
if cluster == nil || cluster.Client == nil {
return cluster, nil
}
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
if err := cluster.Ping(ctx); err != nil {
return cluster, err
}
return cluster, nil
}
func (m *MasterSlaveCluster) Ping(ctx context.Context) error {
if m == nil || m.Client == nil {
return nil
}
return m.Client.Ping(ctx).Err()
}
func filterCacheConf(cacheConf cache.CacheConf) cache.CacheConf {
if len(cacheConf) == 0 {
return cacheConf
}
filtered := make(cache.CacheConf, 0, len(cacheConf))
for _, node := range cacheConf {
if node.Host == "" {
continue
}
filtered = append(filtered, node)
}
return filtered
}
+11
View File
@@ -0,0 +1,11 @@
package snowflakex
import (
"juwan-backend/app/snowflake/rpc/snowflake"
"github.com/zeromicro/go-zero/zrpc"
)
func NewClient(conf zrpc.RpcClientConf) snowflake.SnowflakeServiceClient {
return snowflake.NewSnowflakeServiceClient(zrpc.MustNewClient(conf).Conn())
}