我已经从官方文档中了解RPC模式,但示例非常简单。客户端发送带有reply_to和correlation_id属性的消息,服务器从队列中获取消息并将其重新发送到绑定相同correlation_id的客户端。RPC模式问题
我的问题是:
1)如果服务器被关闭是什么了,客户端将如何得到响应
2)如何在客户端
3)如果设置超时RPC服务器坏了,抛出一个异常,如果我们发送这个异常给客户端
我将不胜感激任何答案。
我已经从官方文档中了解RPC模式,但示例非常简单。客户端发送带有reply_to和correlation_id属性的消息,服务器从队列中获取消息并将其重新发送到绑定相同correlation_id的客户端。RPC模式问题
我的问题是:
1)如果服务器被关闭是什么了,客户端将如何得到响应
2)如何在客户端
3)如果设置超时RPC服务器坏了,抛出一个异常,如果我们发送这个异常给客户端
我将不胜感激任何答案。
服务器应答RPC调用是一个很好的做法。像这样的事情在RabbitMQ docs描述(在Python部分):
尽管可能性不大,有可能是RPC服务器将只发送我们答案后死亡,但发送确认消息的请求之前。如果发生这种情况,重新启动的RPC服务器将再次处理该请求。这就是为什么在客户端,我们必须优雅地处理重复的响应,理想情况下RPC应该是幂等的。
您可以设定消息或整个队列TTL:https://www.rabbitmq.com/ttl.html
这要看情况。如果一个请求的幂等性比没有确认的消息好 - 另一个工作人员会处理它。但它可能会变成毒丸:这样的请求会填满您的RPC队列并导致DoS。因此,您可以手动处理它,例如使用retry_count标头(在工作人员使用递减计数器重新排队消息的情况下)