联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:3810899917

go-zero 配置 服务发现和直连模式兼容-微服务

go-zero 配置 服务发现和直连模式兼容。如果配置了 Etcd(服务发现),优先用 Etcd;如果只配 Endpoints(直连),用直连。

如果配置了 Etcd(服务发现),优先用 Etcd;如果只配 Endpoints(直连),用直连。

1. 配置同时写 Etcd 和 Endpoints

 

假如你希望本地开发用直连,生产用服务发现,可以这样写:

PaymentRpcConf:
  Endpoints:
    - 127.0.0.1:2002         # 本地调试用直连
  Etcd:
    Hosts:
      - 127.0.0.1:2379       # 生产注册中心
    Key: user.rpc
  NonBlock: true

 


2. go-zero 的行为说明

 

  • 如果 Etcd 字段有值,就走服务发现,不管 Endpoints 有没有

  • 只有没有 Etcd 字段,才会走直连 Endpoints

  • 你可以动态通过环境变量或条件写配置,或者线上线下用不同 config 文件

  • 这样能方便切换环境!

 


3. 如何写代码?

 

一行代码不用动! 你直接用如下方式即可:

zrpc.MustNewClient(c.PaymentRpcConf)

go-zero 会自动识别当前配置,优先用 Etcd,否则用 Endpoints

 


4. 如果你想“有Etcd时优先用服务发现,没有时才走直连”,直接配置就行!

 

比如

 

  • 开发环境用 Endpoints

  • 生产环境用 Etcd

 

不需要额外写代码判断,go-zero 自动选优!

 


5. 动态选择的进阶写法(如果你真要动态切)

 

你也可以在代码里用条件来加载不同配置:

go复制编辑var client zrpc.Client
if len(c.PaymentRpcConf.Etcd.Hosts) > 0 {
    client = zrpc.MustNewClient(c.PaymentRpcConf) // 服务发现
} else if len(c.PaymentRpcConf.Endpoints) > 0 {
    client = zrpc.MustNewClient(c.PaymentRpcConf) // 直连
}

一般不用这样,直接在 yaml 里都写上即可。

  • Endpoints:直接写目标服务的 ip:端口,没有用 etcd/consul/nacos 等注册中心

  • NonBlock: true:非阻塞连接(一般建议 true,影响启动时连接方式,不影响服务发现)


总结一句话

 

  • go-zero 原生支持同时配置 Endpoints 和 Etcd

  • 只要 yaml 里都写上,go-zero 会优先用 Etcd 服务发现

  • 本地开发/测试用直连,线上用服务发现,0 改代码,非常丝滑!

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册