存根的 gRPC 并发
gRPC Concurrency for Stubs
在 gRPC 中,我想了解有关服务器处理请求方式的更多信息。
请求是并行执行的吗?或者服务器是否为每个请求生成一个新线程,并并行执行它们?有没有办法修改此行为?我知道在客户端流式 rpc 中,消息顺序是有保证的。
- 如果我将请求 A 和请求 B 发送到同一个 RPC,是否可以保证在 B 开始处理之前首先执行 A?或者他们每个人都是自己的线程并并行执行,但不能保证 A 在 B 之前完成。
理想情况下,我想向服务器发送请求,服务器确认收到请求,然后将请求添加到队列中以按顺序处理,returns 收到响应后处理。我正在探索的一种方法是使用外部任务队列(如 RabbitMQ)对服务完成的工作进行排队,但我想知道是否有更好的方法。
另外——在某种程度上相关的说明——gRPC 是否具有本机重试计数器机制?我有一个特别容易出错的 RPC,在它成功之前可能必须重试多达 3 次(重试之间有任意延迟)。这也可以用 RabbitMQ 实现。
grpc-java 使用 ServerBuilder.executor(Executor)
提供的 Executor
将 RPC 传递给服务,如果没有提供执行程序,则使用 cached thread pool。
同时进行的 RPC 之间没有顺序。 RPC 可以按任何顺序到达。
您可以使用服务器流式 RPC 来允许服务器响应两次,一次用于确认,一次用于完成。您可以在响应消息中使用 oneof
以允许发送两个不同的响应。
grpc-java 作为实验性重试支持。 gRFC A6 describes the support. The configuration is delivered to the client via service config. Retries are disabled by default, so overall you would want something like channelBuilder.defaultServiceConfig(serviceConfig).enableRetry()
. You can also reference the hedging example 这与重试非常相似。
在 gRPC 中,我想了解有关服务器处理请求方式的更多信息。
请求是并行执行的吗?或者服务器是否为每个请求生成一个新线程,并并行执行它们?有没有办法修改此行为?我知道在客户端流式 rpc 中,消息顺序是有保证的。
- 如果我将请求 A 和请求 B 发送到同一个 RPC,是否可以保证在 B 开始处理之前首先执行 A?或者他们每个人都是自己的线程并并行执行,但不能保证 A 在 B 之前完成。
理想情况下,我想向服务器发送请求,服务器确认收到请求,然后将请求添加到队列中以按顺序处理,returns 收到响应后处理。我正在探索的一种方法是使用外部任务队列(如 RabbitMQ)对服务完成的工作进行排队,但我想知道是否有更好的方法。
另外——在某种程度上相关的说明——gRPC 是否具有本机重试计数器机制?我有一个特别容易出错的 RPC,在它成功之前可能必须重试多达 3 次(重试之间有任意延迟)。这也可以用 RabbitMQ 实现。
grpc-java 使用 ServerBuilder.executor(Executor)
提供的 Executor
将 RPC 传递给服务,如果没有提供执行程序,则使用 cached thread pool。
同时进行的 RPC 之间没有顺序。 RPC 可以按任何顺序到达。
您可以使用服务器流式 RPC 来允许服务器响应两次,一次用于确认,一次用于完成。您可以在响应消息中使用 oneof
以允许发送两个不同的响应。
grpc-java 作为实验性重试支持。 gRFC A6 describes the support. The configuration is delivered to the client via service config. Retries are disabled by default, so overall you would want something like channelBuilder.defaultServiceConfig(serviceConfig).enableRetry()
. You can also reference the hedging example 这与重试非常相似。