前面我们把kratos编写的微服务注册到nacos了,那目前有小伙伴说,公司正在技术转行,准备后续的服务都使用go进行编写,但是之前的spring cloud微服务还不能改写,所以这里需要涉及到go和spring cloud进行共存,业务中需要在go服务中通过nacos进行服务发现,调用spring cloud的某个服务。所以本文我们来演示一下。
这里在go-kratos微服务中调用spring cloud微服务目前没有类似openfeign这样的框架,所以一般主要是通过net/http框架来直接实现的。实现步骤如下:
1、通过nacos client从nacos中获取一个对应服务名的健康实例对象。 2、通过实例对象的属性,拼接requesturl 3、使用net/http调用requesturl 4、json解析返回的responsebody 5、数据使用。
下面我们来演示一下,这里首先我们准备一个spring cloud编写的微服务项目:
然后把它启动起来,查看下nacos是否已经注册上去了:
然后在之前编写的user-center项目里面,改写下internal/data/account.go文件的GetUserOrders方法,具体的代码如下:
func (acc accountRepo) GetUserOrders(ctx context.Context) (res string, err error) { instance, _ := acc.data.nrg.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{ ServiceName: "goods-service", GroupName: "DEFAULT_GROUP", // 默认值DEFAULT_GROUP Clusters: []string{"DEFAULT"}, // 默认值DEFAULT }) fmt.Println(instance) requestUrl := fmt.Sprintf("%s%s%s%d%s%d", "http://", instance.Ip, ":", instance.Port, "/good/info/", 1) response, err := http2.Get(requestUrl) if err != nil { return } defer response.Body.Close() resBytes, _ := io.ReadAll(response.Body) fmt.Printf("%s", string(resBytes)) return "测试", nil }
这里由于是demo,所以只需要把调用第三方的结果给打印出来即可
最后运行看看效果:
可以看到这里已经调用成功了。说明我们在go-kratos体系的微服务里面调用spring cloud微服务是成功的。
备注:
1、这里做一些改变,前面注册nacos的register的时候,我们的对象直接是registry,这里我们修改为naming_client.INamingClient。对象,具体修改的点有:
1)internal/data/data.go文件
2、cmd/user-center/main.go文件
3、internal/data/account.go文件
最后按照惯例,附上本案例2个微服务的源码,登录后即可下载。
还没有评论,来说两句吧...