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