Golang使用go-kit组件进行微服务注册和发现

首先介绍以下go-kit组件的大致结构
按照调用的顺序进行介绍

  1. transport:进行主要负责网络传传输,进行编码和解码
  2. endpoint:主要负责request和response的格式的转换。
  3. service:进行业务逻辑的开发
    调用顺序的介绍:
    首先,transport获得参数,将所获得的参数转化为结构体类型的值,并返回request的结构体
    第二,使用endpoint接受到的参数为transport的反回的request结构体,并进行调用service业务逻辑函数,只不过,endpoint接收到的参数为接口类型的变量,需要进行断言。调用service业务逻辑之后,返回的就是response类型的值。
    第三,使用 transport进行解码,将返回的response类型的值进行解码。

服务注册

	config:=consulapi.DefaultConfig()
	config.Address="127.0.0.1:8500"//注册到的地址
	reg:=consulapi.AgentServiceRegistration{}
	reg.Address="127.0.0.1"//注册服务的地址
	reg.Port=8080//注册服务的端口号
	reg.Name="testname"//注册服务的名称,如果两个服务相同,则服务名相同,进行负载均衡
	reg.ID="111111"//服务id
	check:=consulapi.AgentServiceCheck{Interval: "5s",HTTP: "http://127.0.0.1:8080/health"}//服务检查,间隔时长,检查的接口
	reg.Check=&check
	Client,_=consulapi.NewClient(config)//consul-client端注册
	Client.Agent().ServiceRegister(&reg)//服务service端注册

服务发现

我们需要通过consul进行服务发现和调用,所以还需要进行调用consulapi

func f(instance string) (endpoint.Endpoint, io.Closer, error){
	tart,_:=url.Parse("http://"+instance)
	return 
//注意:getuser是编码函数,get是解码函数	httptransport.NewClient("GET",tart,service.Getuser,service.Get).Endpoint(),nil,nil
}
	//开头相同,都是进行consul客户端的注册
	config := consulapi.DefaultConfig()//consul配置信息
	config.Address = "127.0.0.1:8500" //register  address
	api_client, _ := consulapi.NewClient(config)//以client端注册node节点
	client := consul.NewClient(api_client)//与注册服务不同的是,这里是客户端,需要访问的是服务端
	var logger log.Logger//log组件
	logger = log.NewLogfmtLogger(os.Stdout)//初始化log组件
	//
	instancer := consul.NewInstancer(client, logger, "testname",[]string{}, true)
	endpointer := sd.NewEndpointer(instancer, f, logger)
	//查询节点信息,进行查找,注意tag标签一定要写对,没有就是没有,有就写上
	endpoints,_:=endpointer.Endpoints()//获得节点
	res,_:=endpoints[0](context.Background(),service.UserRequest{Uid: 100})
	//进行调用服务节点
	userifo:=res.(service.UserResponse)//将返回的数据进行断言
	fmt.Println(userifo)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值