grpc+consul 客户端的问题

grpc+consul
客户端通过consul获取服务端的配置从而连接服务端请求数据。

有个问题一直不明白,通常客户端是以一个独立的服务运行的还是直接写到路由的handlerFunc中运行的?


我目前是把客户端封装为一个函数,让路由调用它。

//CallTest()是封装好的客户端函数
//用于调用 服务端的 Test 接口
func CallTest() {
    connFormConsul,err := grpc.Dial(consulConfig, ...)
    defer connFormConsul.Close()
    ...
    service := pb.NewXXXClient(connFormConsul)
    
    //调用服务端API
    service.Test(...)
}

但是这么使用,每次请求CallTest()都要重新连接一次,这里就产生了2~3百毫秒的延迟(本地测试)。


我试了把客户端一直运行,路由与客户端耦合,延迟降到30毫秒内(本地测试),同时启动两个服务端A与B。这样假如客户端启动的时候连接的是A服务器,当A挂了之后,客户端就请求不到数据了。

这些问题大家都是怎么解决的??

阅读 1.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进