package cloud import ( "BlogFile/bootstrap" "BlogFile/third_party/database" "context" "fmt" "log" "sync" "time" "github.com/redis/go-redis/v9" ) var ( // serviceName string = "BlogAdminService" // host string = "192.168.0.50" // port string = "8081" countMap sync.Map ) type distributedService struct { } var DistributedService distributedService var redisClient *redis.Client var down bool func init() { registerCenter := bootstrap.Config.Cloud.RegisterCenter db := bootstrap.Config.Cloud.RegisterCenterDb redisClient = redis.NewClient(&redis.Options{ Addr: registerCenter, DB: db, // 默认DB 0 }) // RedisTemplate = redis.NewClient(&redis.Options{ // Addr: "localhost:6379", // Password: "", // 没有密码,默认值 // DB: 0, // 默认DB 0 // }) ctx := context.Background() sc := redisClient.Ping(ctx) pong := sc.Val() if pong == "PONG" { log.Println("注册中心Redis连接成功") // RedisTemplate.FlushAll(ctx) } } func addReqCount(service string) int64 { val, _ := countMap.Load(service) i := val.(int64) countMap.Store(service, i+1) return i } func (*distributedService) Req(service string, url string) { ctx := context.Background() key := fmt.Sprintf("distributed:%v", service) total := database.RedisTemplate.SCard(ctx, key).Val() if total == 0 { log.Println(service, "服务不存在") return } results := database.RedisTemplate.SMembers(ctx, key).Val() current := addReqCount(service) addr := results[total%current] // r, err := http.NewRequest("", addr+url, nil) log.Println(addr) } func (*distributedService) ServiceUp() { go func() { log.Println("心跳开始") ctx := context.Background() serviceName := bootstrap.Config.Cloud.ServiceName host := bootstrap.Config.Cloud.Host heartbeat := bootstrap.Config.Cloud.Heartbeat for { if down { break } time.Sleep(time.Second * time.Duration(heartbeat)) key := fmt.Sprintf("distributed:%v", serviceName) // addr := fmt.Sprintf("%v:%v", host, port) redisClient.SAdd(ctx, key, host) } }() // keys, _ := database.RedisTemplate.Scan(ctx, 0, keyPerfix, 0).Val() // i := len(keys) // key := keys[0/i] // result := database.RedisTemplate.Get(ctx, key).Val() // log.Println(result) } func (*distributedService) ServiceDown() { down = true ctx := context.Background() serviceName := bootstrap.Config.Cloud.ServiceName host := bootstrap.Config.Cloud.Host key := fmt.Sprintf("distributed:%v", serviceName) // addr := fmt.Sprintf("%v:%v", host, port) redisClient.SRem(ctx, key, host) }