gRPC是否重新发送消息

时间:2018-06-04 10:54:28

标签: grpc grpc-java

与服务器端代码的幂等性或其必要性相关的问题。无论是一般的gRPC,还是特别是java实现。

当我们从客户端发送一次消息时,是否可能由我们的服务实现处理两次? 也许这与服务似乎不可用时的重试有关;或者可以通过某些政策进行配置?

2 个答案:

答案 0 :(得分:3)

现在,当您从客户端发送消息时,服务器(最多)会看到一次消息。如果您有幂等方法,您很快就可以指定自动重试的策略(design doc),但默认情况下不会启用这些重试尝试。您不必担心gRPC库多次发送RPC,除非您在重试策略中配置了这个。

答案 1 :(得分:0)

根据grpc-java/5724,重试逻辑已经实现。 OP使用Map进行操作,该操作类型不安全。更好的方法如下:

NettyChannelBuilder builder = NettyChannelBuilder.forAddress(host, port)
  .enableRetry()        
  .maxRetryAttempts(3);

NettyChannelBuilder上还有其他重试配置。

还有一个示例here,尽管很难找到。