feat: refactor.

This commit is contained in:
tx7do
2024-05-06 10:26:59 +08:00
parent 7ce746e181
commit 72daf43151
13 changed files with 100 additions and 81 deletions

288
registry/registry.go Normal file
View File

@@ -0,0 +1,288 @@
package registry
import (
"path/filepath"
"github.com/go-kratos/kratos/v2/log"
"github.com/go-kratos/kratos/v2/registry"
// etcd
etcdKratos "github.com/go-kratos/kratos/contrib/registry/etcd/v2"
etcdClient "go.etcd.io/etcd/client/v3"
// consul
consulKratos "github.com/go-kratos/kratos/contrib/registry/consul/v2"
consulClient "github.com/hashicorp/consul/api"
// eureka
eurekaKratos "github.com/go-kratos/kratos/contrib/registry/eureka/v2"
// nacos
nacosKratos "github.com/go-kratos/kratos/contrib/registry/nacos/v2"
nacosClients "github.com/nacos-group/nacos-sdk-go/clients"
nacosConstant "github.com/nacos-group/nacos-sdk-go/common/constant"
nacosVo "github.com/nacos-group/nacos-sdk-go/vo"
// zookeeper
zookeeperKratos "github.com/go-kratos/kratos/contrib/registry/zookeeper/v2"
"github.com/go-zookeeper/zk"
// kubernetes
k8sRegistry "github.com/go-kratos/kratos/contrib/registry/kubernetes/v2"
k8s "k8s.io/client-go/kubernetes"
k8sRest "k8s.io/client-go/rest"
k8sTools "k8s.io/client-go/tools/clientcmd"
k8sUtil "k8s.io/client-go/util/homedir"
// polaris
//polarisKratos "github.com/go-kratos/kratos/contrib/registry/polaris/v2"
// servicecomb
servicecombClient "github.com/go-chassis/sc-client"
servicecombKratos "github.com/go-kratos/kratos/contrib/registry/servicecomb/v2"
conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1"
)
type RegistryType string
const (
RegistryTypeConsul RegistryType = "consul"
LoggerTypeEtcd RegistryType = "etcd"
LoggerTypeZooKeeper RegistryType = "zookeeper"
LoggerTypeNacos RegistryType = "nacos"
LoggerTypeKubernetes RegistryType = "kubernetes"
LoggerTypeEureka RegistryType = "eureka"
LoggerTypePolaris RegistryType = "polaris"
LoggerTypeServicecomb RegistryType = "servicecomb"
)
// NewRegistry 创建一个注册客户端
func NewRegistry(cfg *conf.Registry) registry.Registrar {
if cfg == nil {
return nil
}
switch RegistryType(cfg.Type) {
case RegistryTypeConsul:
return NewConsulRegistry(cfg)
case LoggerTypeEtcd:
return NewEtcdRegistry(cfg)
case LoggerTypeZooKeeper:
return NewZooKeeperRegistry(cfg)
case LoggerTypeNacos:
return NewNacosRegistry(cfg)
case LoggerTypeKubernetes:
return NewKubernetesRegistry(cfg)
case LoggerTypeEureka:
return NewEurekaRegistry(cfg)
case LoggerTypePolaris:
return nil
case LoggerTypeServicecomb:
return NewServicecombRegistry(cfg)
}
return nil
}
// NewDiscovery 创建一个发现客户端
func NewDiscovery(cfg *conf.Registry) registry.Discovery {
if cfg == nil {
return nil
}
switch RegistryType(cfg.Type) {
case RegistryTypeConsul:
return NewConsulRegistry(cfg)
case LoggerTypeEtcd:
return NewEtcdRegistry(cfg)
case LoggerTypeZooKeeper:
return NewZooKeeperRegistry(cfg)
case LoggerTypeNacos:
return NewNacosRegistry(cfg)
case LoggerTypeKubernetes:
return NewKubernetesRegistry(cfg)
case LoggerTypeEureka:
return NewEurekaRegistry(cfg)
case LoggerTypePolaris:
return nil
case LoggerTypeServicecomb:
return NewServicecombRegistry(cfg)
}
return nil
}
// NewConsulRegistry 创建一个注册发现客户端 - Consul
func NewConsulRegistry(c *conf.Registry) *consulKratos.Registry {
cfg := consulClient.DefaultConfig()
cfg.Address = c.Consul.Address
cfg.Scheme = c.Consul.Scheme
var cli *consulClient.Client
var err error
if cli, err = consulClient.NewClient(cfg); err != nil {
log.Fatal(err)
}
reg := consulKratos.New(cli, consulKratos.WithHealthCheck(c.Consul.HealthCheck))
return reg
}
// NewEtcdRegistry 创建一个注册发现客户端 - Etcd
func NewEtcdRegistry(c *conf.Registry) *etcdKratos.Registry {
cfg := etcdClient.Config{
Endpoints: c.Etcd.Endpoints,
}
var err error
var cli *etcdClient.Client
if cli, err = etcdClient.New(cfg); err != nil {
log.Fatal(err)
}
reg := etcdKratos.New(cli)
return reg
}
// NewZooKeeperRegistry 创建一个注册发现客户端 - ZooKeeper
func NewZooKeeperRegistry(c *conf.Registry) *zookeeperKratos.Registry {
conn, _, err := zk.Connect(c.Zookeeper.Endpoints, c.Zookeeper.Timeout.AsDuration())
if err != nil {
log.Fatal(err)
}
reg := zookeeperKratos.New(conn)
if err != nil {
log.Fatal(err)
}
return reg
}
// NewNacosRegistry 创建一个注册发现客户端 - Nacos
func NewNacosRegistry(c *conf.Registry) *nacosKratos.Registry {
srvConf := []nacosConstant.ServerConfig{
*nacosConstant.NewServerConfig(c.Nacos.Address, c.Nacos.Port),
}
cliConf := nacosConstant.ClientConfig{
NamespaceId: c.Nacos.NamespaceId,
TimeoutMs: uint64(c.Nacos.Timeout.AsDuration().Milliseconds()), // http请求超时时间单位毫秒
BeatInterval: c.Nacos.BeatInterval.AsDuration().Milliseconds(), // 心跳间隔时间,单位毫秒
UpdateThreadNum: int(c.Nacos.UpdateThreadNum), // 更新服务的线程数
LogLevel: c.Nacos.LogLevel,
CacheDir: c.Nacos.CacheDir, // 缓存目录
LogDir: c.Nacos.LogDir, // 日志目录
NotLoadCacheAtStart: c.Nacos.NotLoadCacheAtStart, // 在启动时不读取本地缓存数据true--不读取false--读取
UpdateCacheWhenEmpty: c.Nacos.UpdateCacheWhenEmpty, // 当服务列表为空时是否更新本地缓存true--更新,false--不更新
}
cli, err := nacosClients.NewNamingClient(
nacosVo.NacosClientParam{
ClientConfig: &cliConf,
ServerConfigs: srvConf,
},
)
if err != nil {
log.Fatal(err)
}
reg := nacosKratos.New(cli)
return reg
}
// NewKubernetesRegistry 创建一个注册发现客户端 - Kubernetes
func NewKubernetesRegistry(_ *conf.Registry) *k8sRegistry.Registry {
restConfig, err := k8sRest.InClusterConfig()
if err != nil {
home := k8sUtil.HomeDir()
kubeConfig := filepath.Join(home, ".kube", "config")
restConfig, err = k8sTools.BuildConfigFromFlags("", kubeConfig)
if err != nil {
log.Fatal(err)
return nil
}
}
clientSet, err := k8s.NewForConfig(restConfig)
if err != nil {
log.Fatal(err)
return nil
}
reg := k8sRegistry.NewRegistry(clientSet)
return reg
}
// NewEurekaRegistry 创建一个注册发现客户端 - Eureka
func NewEurekaRegistry(c *conf.Registry) *eurekaKratos.Registry {
var opts []eurekaKratos.Option
opts = append(opts, eurekaKratos.WithHeartbeat(c.Eureka.HeartbeatInterval.AsDuration()))
opts = append(opts, eurekaKratos.WithRefresh(c.Eureka.RefreshInterval.AsDuration()))
opts = append(opts, eurekaKratos.WithEurekaPath(c.Eureka.Path))
var err error
var reg *eurekaKratos.Registry
if reg, err = eurekaKratos.New(c.Eureka.Endpoints, opts...); err != nil {
log.Fatal(err)
}
return reg
}
// NewPolarisRegistry 创建一个注册发现客户端 - Polaris
//func NewPolarisRegistry(c *conf.Registry) *polarisKratos.Registry {
//var err error
//
//var consumer polarisApi.ConsumerAPI
//if consumer, err = polarisApi.NewConsumerAPI(); err != nil {
// log.Fatalf("fail to create consumerAPI, err is %v", err)
//}
//
//var provider polarisApi.ProviderAPI
//provider = polarisApi.NewProviderAPIByContext(consumer.SDKContext())
//
//log.Infof("start to register instances, count %d", c.Polaris.InstanceCount)
//
//var resp *polarisModel.InstanceRegisterResponse
//for i := 0; i < (int)(c.Polaris.InstanceCount); i++ {
// registerRequest := &polarisApi.InstanceRegisterRequest{}
// registerRequest.Service = c.Polaris.Service
// registerRequest.Namespace = c.Polaris.Namespace
// registerRequest.Host = c.Polaris.Address
// registerRequest.Port = (int)(c.Polaris.Port) + i
// registerRequest.ServiceToken = c.Polaris.Token
// registerRequest.SetHealthy(true)
// if resp, err = provider.RegisterInstance(registerRequest); err != nil {
// log.Fatalf("fail to register instance %d, err is %v", i, err)
// } else {
// log.Infof("register instance %d response: instanceId %s", i, resp.InstanceID)
// }
//}
//
//reg := polarisKratos.NewRegistry(provider, consumer)
//
//return reg
//}
// NewServicecombRegistry 创建一个注册发现客户端 - Servicecomb
func NewServicecombRegistry(c *conf.Registry) *servicecombKratos.Registry {
cfg := servicecombClient.Options{
Endpoints: c.Servicecomb.Endpoints,
}
var cli *servicecombClient.Client
var err error
if cli, err = servicecombClient.NewClient(cfg); err != nil {
log.Fatal(err)
}
reg := servicecombKratos.NewRegistry(cli)
return reg
}