package cloud import ( "BlogAdmin/third_party/database" "context" "fmt" "log" "sync" ) var ( serviceName string = "BlogAdminService" host string = "192.168.0.50" port string = "8081" countMap sync.Map ) type distributedService struct { } var DistributedService distributedService func init() { } 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() { ctx := context.Background() key := fmt.Sprintf("distributed:%v", serviceName) addr := fmt.Sprintf("%v:%v", host, port) database.RedisTemplate.SAdd(ctx, key, addr) // 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() { ctx := context.Background() key := fmt.Sprintf("distributed:%v", serviceName) addr := fmt.Sprintf("%v:%v", host, port) database.RedisTemplate.SRem(ctx, key, addr) }