blog/BlogAdminService/cloud/DistributedService.go

70 lines
1.5 KiB
Go

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)
}