首先让我来描述一下这个系统。有2个应用程序,我们称之为客户端和服务器。还有2个队列,请求队列和回复队列。 客户端发布到请求队列,服务器侦听该请求以处理它。在服务器处理邮件后,它会将邮件发布到客户端订阅的回复队列。 服务器应用程序始终将回复发布到预定义的回复队列,而不是客户端应用程序确定的队列。
我无法对服务器应用程序进行更新。我只能更新客户端应用程序。队列由服务器应用程序创建和管理。
我正在尝试从客户端实施请求/回复模式,以便同步返回来自服务器的回复。我知道spring的“sendAndReceive”方法,以及它如何与临时队列一起用于回复目的,以及固定的回复队列。
Spring AMQP - 3.1.9 Request/Reply Messaging
以下是我的问题:
感谢您的时间和回复。
答案 0 :(得分:0)
RabbitTemplate
。重要信息:服务器必须回显客户端设置的correlationId
消息属性,以便可以将回复与客户端中的请求相关联。
...它将其发布到回复队列......
使用RabbitMQ,发布者不会发布到队列,而是使用路由密钥发布到交换机。将发布者与队列紧密联系是不好的做法。如果您无法更改服务器以将回复发布到交换机,并且路由密钥包含来自请求消息的内容(或使用replyTo
属性),那么您就不在运气。
修改强>
如果回复中有某些内容允许您将其与请求相关联;一种可能性是在服务器的回复队列中添加委派使用者。收到回复,执行相关,将回复路由到正确的replyTo
。