在微服务中,我们的子项目之间可以通过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远程调用框架这种。后面的文章中会介绍到。
最后按照惯例,附上本案例的源码,登录后即可查看。
还没有评论,来说两句吧...