2017-07-08 59 views
0

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

我的问题是:

1)如果服务器被关闭是什么了,客户端将如何得到响应

2)如何在客户端

3)如果设置超时RPC服务器坏了,抛出一个异常,如果我们发送这个异常给客户端

我将不胜感激任何答案。

回答

1
  1. 服务器应答RPC调用是一个很好的做法。像这样的事情在RabbitMQ docs描述(在Python部分):

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

  2. 您可以设定消息或整个队列TTL:https://www.rabbitmq.com/ttl.html

  3. 这要看情况。如果一个请求的幂等性比没有确认的消息好 - 另一个工作人员会处理它。但它可能会变成毒丸:这样的请求会填满您的RPC队列并导致DoS。因此,您可以手动处理它,例如使用retry_count标头(在工作人员使用递减计数器重新排队消息的情况下)