【发布时间】:2015-03-26 16:27:54
【问题描述】:
当我在交易所发布时收到 Nack 时,我在配置 ReturnCallback 时遇到问题。这是我的工作:
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setPublisherConfirms(true);
connectionFactory.setPublisherReturns(true);
...
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory());
rabbitTemplate.setMandatory(true);
rabbitTemplate.setConfirmCallback(new MyMessageConfirmCallback());
rabbitTemplate.setReturnCallback(new MyMessageReturnCallback());
然后当我发布消息时,我会向不存在的交换器发送消息
notificationProducerJmsTemplate.send("idontexist.exchange",
"idontexist.key",
messageToSend,
correlationData);
奇怪的是,我到达了MyMessageConfirmCallback 中定义的代码,而不是MyMessageReturnCallback 中定义的代码,即使在第一个代码中ack 的值是false。
我正在使用 RabbitMQ 3.4.2,这是我的 maven 依赖项:
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.4.3.RELEASE</version>
</dependency>
最后但并非最不重要的一点是,我可以在日志中看到以下错误消息:
2015-03-26 16:29:24,094 GMT [pool-21-thread-1] (CachingConnectionFactory.java:281) ERROR connection.CachingConnectionFactory: Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'idontexist.exchange' in vhost '/', class-id=60, method-id=40)
有人发现有问题吗?关于检查什么以找出可能阻止调用 ReturnCallback 的任何提示?
【问题讨论】:
标签: rabbitmq spring-amqp