TypechoJoeTheme

Toasobi的博客

go-zero api与rpc的三种连接方式

本文最后更新于2022年09月15日,已超过734天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

注:本篇文章的代码部分基于该专题的go-zero从零到注册etcd文章所实现的代码

api与rpc之间的连接方式有三种,分别是直连,k8s和etcd,下面我们分别讲解各连接特性以及方式

  • etcd服务发现

相较于直连,etcd多用于机器比较多的时候(配集群连接,多个节点)使用,可以动态发现服务,从而不需要更改api并重新发布。
那go-zero里面如何使用etcd?

我们首先看user-api和user-rpc下的yaml文件

[图片上传中...(12472-4xm3sk3opr3)]

可以这么说,rpc的配置文件中配置了etcd,那么久默认启动了etcd功能

在user-api的yaml文件中启用了一个别名UserRpcConf,在config.go中映射,类型是zrpc.RpcClientConf
[图片上传中...(59591-dl3adespl4c)]

点进去可以看到该类型包含etcd的字段
[图片上传中...(63105-wcmxpdey5sj)]

再看看初始化配置的地方svc,这里和logic关联很大


可以看到这里通过UserRpcConf配置初始化了客户端

那etcd启动后代码流程大致是怎么样的?
简要来说,在启动etcd之后,内部会启动一个协程,该协程会一直订阅etcd并且一直跑下去。在postman测试的时候,我们填写的是api文件中配置的地址和端口,所以会先访问api内部的logic,而这里的logic添加了grpc客户端,会通过grpc去调用rpc中
logic,rpc中的logic处理完后回来将数据打包返回给前端。而至于为什么在rpc中yaml文件的监听地址和etcd的host全部填写为0.0.0.0,是因为注册ip地址时可以注册多个ip地址去调用grpc。

  • 直连

很简单,rpc下的yaml文件把etcd删了,api下的yaml删掉etcd后加上EndPoints

端口号直连rpc的端口

  • k8s服务发现

作者不会

朗读
赞(0)
评论 (0)