首页 > 其他分享 >gin-注册中心注册-符合go语言的设计理念的鸭子类型(重要)

gin-注册中心注册-符合go语言的设计理念的鸭子类型(重要)

时间:2022-11-26 12:44:07浏览次数:43  
标签:string err global 注册 registration go gin

一.目录

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】注册失败")

	}

  

 

 

标签:string,err,global,注册,registration,go,gin
From: https://www.cnblogs.com/wlike/p/16927241.html

相关文章