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

最后发布: 2016-03-17 04:53:58


问题

我打算用RabbitMQ实现RPC模式。 客户端将发送一条消息,请求从服务器获取数据快照。 服务器将通过响应队列将许多包含快照数据的消息发送回客户端。 收到最后一条消息后,客户端应销毁响应队列。

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

rabbitmq
回答

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

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

通常的做法是让客户端应用在客户端连接时打开“回复”队列,并在客户端连接后一直保持打开状态,然后将其重新用于所有回复。 如pinepain建议的那样,使用自动删除功能将在客户端断开连接时删除队列。

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

除了您所建议的以外,这里没有真正的最佳实践。 不过,RabbitMQ消息中没有特定字段。

您可以在邮件中添加所需的任何标头,并使用该标头作为标记来表示对此请求的答复已完成。 或者,您可以仅使用消息正文来包含状态。

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