You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单个gRPC服务器能否运行多个同服务类的不同实例

Server server = ServerBuilder.forPort(8080)
    .addService(new AServiceImpl(argA))
    .addService(new AServiceImpl(argB))
    .build();

可行性与路由逻辑结论

  • 该操作不能达到同时运行两个携带不同参数AService实例的预期,属于无效操作
  • 所有AStub发起的服务调用,只会被路由到你第二次添加的、携带argB的AServiceImpl实例处理

具体原因

gRPC 服务端注册服务时,以.proto文件中定义的服务全限定名(包名+服务名)作为唯一key,同一个key仅能绑定一个服务实现实例。你两次调用addService传入的都是AService对应的实现类,服务名完全相同,因此后注册的实例会直接覆盖先注册的实例,只有最后一个实例会生效。

同端口部署多实例的可选方案

如果确实需要在同一个端口上运行两个不同配置的AService实例,可以参考以下两种方案:

  • 修改.proto定义,声明两个名称不同的服务,分别对应两个AServiceImpl实例注册,客户端根据需求选择对应的Stub发起调用
  • 自定义服务路由拦截器,在请求头中添加参数标识,由拦截器将请求分发到对应配置的实例处理

内容的提问来源于stack exchange,提问作者Litchy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:45:04