一.目录
1. 新建目录
goods-web/utils/register/consul/register.go
2.目录截图
二.配置
1. 概述
1. 创建目录:为了后续支持其他注册中心,保证程序的拓展性,目前只支持consul
2. 利用go语言的特性,实现struct和interfact类型,符合go语言的设计理念的鸭子类型
2. register.go配置
package consul import ( "fmt" "github.com/hashicorp/consul/api" ) type Registry struct { Host string Port int } type RegistryClient interface { Register(address string, port int, name string, tags []string, id string) error DeRegister(serviceId string) error } func NewRegistryClient(host string, port int) RegistryClient { //只要是实现了接口中的Register,DeRegister,就可以返回struct:Registry return &Registry{host, port} } func (r *Registry) DeRegister(serviceId string) error { return nil } func (r *Registry) Register(address string, port int, name string, tags []string, id string) error { //服务注册 cfg := api.DefaultConfig() //注册中心的地址 //cfg.Address = "192.168.1.103:8500" cfg.Address = fmt.Sprintf("%s:%d", r.Host, r.Port) client, err := api.NewClient(cfg) if err != nil { panic(err) } //生成对应的检查对象 check := &api.AgentServiceCheck{ HTTP: fmt.Sprintf("%s:%d/health", address, port), Timeout: "5s", Interval: "5s", DeregisterCriticalServiceAfter: "10s", } //生成注册对象 registration := new(api.AgentServiceRegistration) registration.Name = name registration.ID = id registration.Port = port registration.Tags = tags registration.Address = address registration.Check = check //注册 err = client.Agent().ServiceRegister(registration) //client.Agent().ServiceDeregister() if err != nil { panic(err) } return nil }
3.使用
main中
register_client := consul.NewRegistryClient(global.ServerConfig.ConsulInfo.Host, global.ServerConfig.ConsulInfo.Port) err := register_client.Register(global.ServerConfig.Host, global.ServerConfig.Port, global.ServerConfig.Name, global.ServerConfig.Tags, serviceId) if err != nil { zap.S().Panic("【goods-web】注册失败") }