golang多个grpc的微服务 golang微服务实战_golang多个grpc的微服务


在构建微服务时,使用服务发现可以减少配置的复杂性,本文以go-micro为微服务框架,使用consul作为服务发现服务,使用gin开发golang服务。

使用gin 的原因是gin能够很好的和go-micro进行集成。

本文主要介绍服务注册和发现的实现

关于如何搭建consul服务可以移步:


ubuntu+docker+consul安装部署及使用www.jianshu.com

golang多个grpc的微服务 golang微服务实战_golang多个grpc的微服务_02


本文默认以搭建好了consul服务,服务的地址是:192.168.109.131:8500

如果你搭建好了自己的consul服务,可以在浏览器内输入192.168.109.131:8500(地址根据自己的consul服务做调整),会看到如下界面:


golang多个grpc的微服务 golang微服务实战_服务发现_03


这里我的consul服务启用了 3个节点。

填坑

在开始写代码前,先给大家避一避坑,目前go-micro已经更新到v2版本,此版本去除了对consul 的支持,但支持etcd、mdns作为服务发现,但是老版本的go-micro仍支持consul,但是有些地方做了调整。


首先


这些小编折腾了很久才搞明白,这里先给大家提醒下,避免走我的老路

开撸

  • 服务注册

我们预设两个server,userserver和orderserver

下面开始上代码:

userserver程序结果如下:


golang多个grpc的微服务 golang微服务实战_consul golang使用_04


有两个文件router.go和main.go

main.go代码如下


//main.go实现初始化路由,服务注册


router.go代码如下

router.go主要用来定义程序的api接口,使用gin开发


package


注册的代码就写好了,启动userserver,我们在consul服务界面,可以看到如下效果:


golang多个grpc的微服务 golang微服务实战_consul golang使用_05


说明我们注册成功了

  • 服务发现

服务发现,就是从consul中获取到我们注册进去的服务,这样在调用别的服务时,就不用从配置文件获取,直接查询consul即可。

orderserver我们除了实现服务注册外,也实现服务发现的功能

orderserver代码结构如下:


golang多个grpc的微服务 golang微服务实战_golang多个grpc的微服务_06


上代码

main.go代码如下


package


GetServiceAddr就是服务发现的代码

首先,使用servers,err :=consulReg.GetService(serviceName)获取注册的服务

返回的servers是个slice

然后,使用next := selector.RoundRobin(services)获取其中一个服务的信息

这里注意:

在老版本中可以直接使用selector.RoundRobin(services),但是在v2版本中需要做个转换处理:


var


因为使用的数据结构不同,感兴趣的可以细看下区别。

router.go代码如下


package


启动orderserver 我们就能获取到userserver的地址,各位可以调试看下效果。

今天go-micro+gin+consul微服务实战就介绍完了,是不是很简单