Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存根的gRPC并发性_Java_Concurrency_Microservices_Grpc_Grpc Java - Fatal编程技术网

Java 存根的gRPC并发性

Java 存根的gRPC并发性,java,concurrency,microservices,grpc,grpc-java,Java,Concurrency,Microservices,Grpc,Grpc Java,在gRPC中,我想了解更多关于服务器处理请求的方式的信息 请求是否并行执行?或者服务器是否为每个请求生成一个新线程,并并行执行它们?有没有办法改变这种行为?我知道在客户端流式rpc中,消息顺序是有保证的 如果我先发送请求A,然后再发送请求B到同一个RPC,是否保证在B开始处理之前先执行A?或者它们各自有自己的线程并并行执行,但不保证A在B之前完成。 理想情况下,我希望向服务器发送一个请求,服务器确认收到该请求,然后将该请求添加到要顺序处理的队列中,并在处理后返回一个响应。我正在探索的一种方法是使

在gRPC中,我想了解更多关于服务器处理请求的方式的信息

请求是否并行执行?或者服务器是否为每个请求生成一个新线程,并并行执行它们?有没有办法改变这种行为?我知道在客户端流式rpc中,消息顺序是有保证的

如果我先发送请求A,然后再发送请求B到同一个RPC,是否保证在B开始处理之前先执行A?或者它们各自有自己的线程并并行执行,但不保证A在B之前完成。 理想情况下,我希望向服务器发送一个请求,服务器确认收到该请求,然后将该请求添加到要顺序处理的队列中,并在处理后返回一个响应。我正在探索的一种方法是使用外部任务队列(如RabbitMQ)对服务完成的工作进行排队,但我想知道是否有更好的方法


另外,gRPC是否有本机重试计数器机制?我有一个特别容易出错的RPC,在它成功之前,它可能需要在重试之间任意延迟重试3次。这也可以通过RabbitMQ实现。

grpc java使用ServerBuilder.Executor提供的执行器将RPC传递给服务,如果没有提供执行器,则使用a

同步RPC之间没有排序。RPC可以以任何顺序到达

您可以使用服务器流式RPC来允许服务器响应两次,一次用于确认,一次用于完成。您可以在响应消息中使用其中一个来允许发送两个不同的响应


GRPCJava作为实验性重试支持。描述了支持。配置通过服务配置交付给客户机。默认情况下禁用重试,因此总体而言,您可能需要类似channelBuilder.defaultServiceConfigserviceConfig.enableRetry的内容。您还可以引用非常类似于重试的。grpc java使用ServerBuilder.Executor提供的执行器将RPC传递给服务,如果未提供执行器,则使用

同步RPC之间没有排序。RPC可以以任何顺序到达

您可以使用服务器流式RPC来允许服务器响应两次,一次用于确认,一次用于完成。您可以在响应消息中使用其中一个来允许发送两个不同的响应


GRPCJava作为实验性重试支持。描述了支持。配置通过服务配置交付给客户机。默认情况下禁用重试,因此总体而言,您可能需要类似channelBuilder.defaultServiceConfigserviceConfig.enableRetry的内容。您还可以参考与重试非常相似的。

谢谢!有没有办法将RPC本机设置为同步的?这意味着服务器一次只执行一个,其余的等待?我可以在服务实现中使用某种锁定。不,不能让一个RPC等待另一个RPC。您可以为执行器使用单个线程,但这只会序列化回调,并且每个RPC都有多个回调,因此仍然可以重新排序。但是,即使存在这样的事情,也不需要首先接收您首选的RPC。即使同时允许多个RPC,您也应该能够使用锁定。因此,例如,在使用proto和GRPC的Java中,建议的方法是在生成的ImplBase类的实现中使用锁定?我只是想确认一下。我不会说推荐,因为有很多可能的解决方案,它们的复杂性和适用性因您的服务而异。但是是的,在扩展生成的ImplBase的类中使用锁是可以的。谢谢!有没有办法将RPC本机设置为同步的?这意味着服务器一次只执行一个,其余的等待?我可以在服务实现中使用某种锁定。不,不能让一个RPC等待另一个RPC。您可以为执行器使用单个线程,但这只会序列化回调,并且每个RPC都有多个回调,因此仍然可以重新排序。但是,即使存在这样的事情,也不需要首先接收您首选的RPC。即使同时允许多个RPC,您也应该能够使用锁定。因此,例如,在使用proto和GRPC的Java中,建议的方法是在生成的ImplBase类的实现中使用锁定?我只是想确认一下。我不会说推荐,因为有很多可能的解决方案,它们的复杂性和适用性因您的服务而异。但是,在扩展生成的ImplBase的类中使用锁是可以的。