0

我正在遵循Stock Trading示例的说明,其中概述了如何使用请求/回复消息spring-amqphttp ://static.springsource.org/spring-amqp/docs/1.2.x/reference/html/sample-apps.html #d4e742

convertSendAndReceive我已经调整了示例说明以创建一个客户端,该客户端应该通过使用而不是等待回复convertAndSendhttps ://gist.github.com/pulkitsinghal/5774487

现在,即使将回复放在 responseQueue 上,并且我已将超时更新为rabbitTemplate.setReplyTimeout(60000);比默认的 5 秒长……在我的客户端中,我也会收到null回复作为回复。

有谁知道发生了什么?


更新#1

有人建议我添加一个<reply-listener/><rabbit:template/>但我不确定如何以编程方式执行此操作:

@Bean
public RabbitTemplate rabbitTemplate() {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
    rabbitTemplate.setMessageConverter(jsonMessageConverter());
    rabbitTemplate.setReplyQueue(responseQueue());
    rabbitTemplate.setReplyTimeout(60000);
    // following is private
    //rabbitTemplate.addListener
    return rabbitTemplate;
}
4

1 回答 1

1

我假设您在使用固定回复队列convertsendAndReceive配置的方式上没有收到错误;RabbitTemplate如果这样做,则需要一个侦听器容器来接收带有模板作为“侦听器”的消息。

最简单的配置方法是使用 xml

<rabbit:template ... reply-queue="foo">
    <reply-listener/>
</rabbit:template>

我建议您在没有固定回复队列的情况下先让它工作 - 让模板创建自己的回复队列。

您还应该删除MessagePostProcessor中的 ,convertSendAndReceive因为模板将处理自己的回复队列和相关配置。当没有固定的回复队列时,这是不允许的。

当您切换到使用固定回复队列时,我建议您使用 1.2.0.M1(或快照),因为模板使用了非标准的关联技术。

更新:要使用 @Bean 配置而不是 XML,只需创建一个SimpleMessageListenerContainerbean 并将其侦听器设置为RabbitTemplate. 只要确保在两个地方都使用相同的队列(解析器在使用命名空间时会处理这个问题)。

于 2013-06-13T16:33:15.593 回答