与服务器端代码的幂等性或其必要性相关的问题。无论是一般的gRPC,还是特别是java实现。
当我们从客户端发送一次消息时,是否可能由我们的服务实现处理两次? 也许这与服务似乎不可用时的重试有关;或者可以通过某些政策进行配置?
答案 0 :(得分:3)
现在,当您从客户端发送消息时,服务器(最多)会看到一次消息。如果您有幂等方法,您很快就可以指定自动重试的策略(design doc),但默认情况下不会启用这些重试尝试。您不必担心gRPC库多次发送RPC,除非您在重试策略中配置了这个。
答案 1 :(得分:0)
根据grpc-java/5724,重试逻辑已经实现。 OP使用Map
进行操作,该操作类型不安全。更好的方法如下:
NettyChannelBuilder builder = NettyChannelBuilder.forAddress(host, port)
.enableRetry()
.maxRetryAttempts(3);
NettyChannelBuilder
上还有其他重试配置。
还有一个示例here,尽管很难找到。