在微服务中,我们的子项目之间可以通过nacos进行服务发现,然后调用其他的服务,所以本文我们来使用一下服务发现的功能。
目前go语言的nacos客户端注册到nacos之后,就可以被其他的服务发现了。其他的服务注册到nacos之后,咱们的go语言nacos客户端也可以发现其他的服务,本文我们来演示一下。
这里还是使用之前的u-mall这个项目,我们把goods-service修改一下:
1、去掉配置中心的依赖和相关的配置文件。 2、去掉获取动态配置信息
然后我们把gateway和goods服务都启动起来,示例图如下;
然后咱们在go语言代码里面创建一个负载均衡获取实例的方法,示例代码如下:
/**
负载均衡获取一个健康的实例
*/
func SelectOneHealthyInstance(client naming_client.INamingClient, serviceName string) (instance *model.Instance) {
instances, err := client.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{
ServiceName: serviceName,
})
if err != nil {
panic("SelectOneHealthyInstance failed!")
}
return instances
}然后新建controller远程请求goods-service的某个接口服务,示例代码如下:
func GetGoodStock(c *gin.Context) {
goodId := c.Query("id")
instance := discover.SelectOneHealthyInstance(discover.NamingClient, "goods-service")
url := fmt.Sprintf("http://%s:%d/good/user/%s", instance.Ip, instance.Port, goodId)
fmt.Println("url是:", url)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
s, err := ioutil.ReadAll(resp.Body)
fmt.Printf(string(s))
c.JSON(http.StatusOK, gin.H{
"code": 200,
"msg": "请求成功",
"data": string(s),
})
}最后把新的接口添加到路由里面去:
然后我们通过gateway请求下这个新的接口:
可以看到实现了服务之间的调用。
备注:
1、这里我们采用默认的负载均衡轮询的方式获取一个健康的实例。 2、获取到了实例之后,我们就能获取到对应实例的ip+端口 3、然后组装相关的url,使用http进行请求。 4、这里我们主要是演示服务发现的基本使用,暂时不讲解类似feign远程调用框架这种。后面的文章中会介绍到。
最后按照惯例,附上本案例的源码,登录后即可查看。




还没有评论,来说两句吧...