从recieveAndConvert()获得null响应spring -amqp

时间:2016-07-07 06:56:03

标签: spring-amqp spring-rabbitmq

我在replyQ上创建并使用一个直接交换完成了biniding。 通过将replyto属性设置为“replyQ”来创建消息 并将兔子的消息发送给其他服务。 另一端的服务获取消息并在给定的replyTo队列上发送回复。

现在我正在尝试使用

从replyQ队列中读取
    template.receiveAndConvert(replyQueue));

但是获得空响应,我可以在replyQ中看到该消息。 即服务能够发送回复,但无法从给定队列中读取

请帮助出错。

2 个答案:

答案 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);
}