最终消息上的RabbitMQ RPC关闭响应队列

最终消息上的RabbitMQ RPC关闭响应队列,rabbitmq,Rabbitmq,我计划用RabbitMQ实现一个RPC模式。 客户端将发送一条消息,请求服务器提供数据快照。 服务器将通过响应队列将许多包含快照数据的消息发送回客户端。 当收到最后一条消息时,客户端应该销毁响应队列 我可以通过在消息或消息头中放置一些字段来手动实现此模式,但是是否有实现此模式的最佳实践方法,可能是为最后一条消息发送信号的指定头字段 当收到最后一条消息时,客户端应该销毁响应队列 我的第一反应是“为什么?” 通常的做法是让客户端应用程序在客户端连接时打开一个“回复”队列,并在客户端连接时保持其打开状

我计划用RabbitMQ实现一个RPC模式。 客户端将发送一条消息,请求服务器提供数据快照。 服务器将通过响应队列将许多包含快照数据的消息发送回客户端。 当收到最后一条消息时,客户端应该销毁响应队列

我可以通过在消息或消息头中放置一些字段来手动实现此模式,但是是否有实现此模式的最佳实践方法,可能是为最后一条消息发送信号的指定头字段

当收到最后一条消息时,客户端应该销毁响应队列

我的第一反应是“为什么?”

通常的做法是让客户端应用程序在客户端连接时打开一个“回复”队列,并在客户端连接时保持其打开状态,然后对所有回复重复使用它。正如pinepain所建议的,使用自动删除将在客户端断开连接时删除队列

我可以通过在消息或消息头中放置一些字段来手动实现此模式,但是是否有实现此模式的最佳实践方法,可能是为最后一条消息发送信号的指定头字段

除了你的建议,这里没有真正的最佳实践。不过,RabbitMQ消息中没有用于此目的的特定字段

您可以向邮件中添加任何您想要的标题,并使用该标题作为标志,表示此请求的答复已完成。或者,您可以只使用消息体来包含状态


这两个选项中的任何一个(可能还有更多选项)都可以正常工作。

队列标志符合您的需要吗?@pinepain不,实际上,当客户端断开连接时,“自动删除”将删除队列,但客户端不知道何时断开连接,只会保持连接。要回答您的问题“为什么?”,因为此RPC调用仅在客户端首次启动时进行,之后它将接收来自扇出交换的数据。不会有更多的电话,因此没有任何理由让队列保持活动状态。我明白了。那么,这样做似乎是合理的!