我在replyQ上创建并使用一个直接交换完成了biniding。 通过将replyto属性设置为“replyQ”来创建消息 并将兔子的消息发送给其他服务。 另一端的服务获取消息并在给定的replyTo队列上发送回复。
现在我正在尝试使用
从replyQ队列中读取 template.receiveAndConvert(replyQueue));
但是获得空响应,我可以在replyQ中看到该消息。 即服务能够发送回复,但无法从给定队列中读取
请帮助出错。
答案 0 :(得分:0)
template.receiveAndConvert()
是同步的,阻止了一段时间的一次性功能,默认超时为:
private static final long DEFAULT_REPLY_TIMEOUT = 5000;
也许这是你的问题。
考虑切换到ListenerContainer
进行连续队列轮询。
另一种选择是RabbitTemplate.sendAndReceive()
,但是,使用固定的回复队列,您仍然可以处理ListenerContainer
。有关详细信息,请参阅Spring AMQP Reference Manual。
答案 1 :(得分:0)
我不知道这是否可以帮助任何人,但我发现将所需的Object声明为方法侦听器的参数即可完成工作
@RabbitListener(queues = QUEUE_PRODUCT_NEW)
public void onNewProductListener(ProductDTO productDTO) {
// messagingTemplate.receiveAndConvert(QUEUE_PRODUCT_NEW) this returns null
log.info("A new product was created {}", productDTO);
}