RPC模式问题

时间:2017-07-08 06:30:45

标签: java rabbitmq rpc

我已经从官方文档中了解了RPC模式,但是示例非常简单。客户端发送带有reply_to和correlation_id属性的消息,服务器从队列中获取消息并将其重新发送到绑定相同correlation_id的客户端。

我的问题是:

1)如果服务器关闭,客户端将如何获得响应怎么办

2)如何在客户端设置RPC的超时

3)如果服务器坏了并引发了异常,我们是否应该将此异常发送给客户端

我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 最好通过服务器来进行RPC调用。在RabbitMQ docs(在Python部分中)中描述了类似的内容:

      

    尽管不太可能,但在向我们发送答案之后,但在发送请求的确认消息之前,RPC服务器可能会死亡。如果发生这种情况,重新启动的RPC服务器将再次处理请求。这就是为什么在客户端我们必须优雅地处理重复的响应,理想情况下RPC应该是幂等的。

  2. 您可以为邮件或整个队列设置TTL:https://www.rabbitmq.com/ttl.html

  3. 这取决于。如果请求是幂等的,那么可以不确认消息 - 另一个工作人员将处理它。但它可能成为一个毒丸:此类请求将填满您的RPC队列并将导致DoS。因此,您可以手动处理它,例如使用retry_count标头(如果失败的工作人员重新排队消息,并且计数器减少)