gpt4 book ai didi

rabbitmq - Spring-rabbit - ReturnCallback 未触发

转载 作者:行者123 更新时间:2023-12-03 19:58:13 26 4
gpt4 key购买 nike

当我在交易所发布时收到 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 中的那个,即使在第一个值 ackfalse .

我正在使用 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 的任何提示?

最佳答案

这就是它在 Rabbit Client 中的工作方式:AMQImpl.Close由 Broker 发起关闭当前 Channel .那是因为 NOT_FOUND - no exchange 'idontexist.exchange' in vhost '/'被视为严重错误 ( ChannelN#processAsync ):

if (method instanceof Channel.Close) {
asyncShutdown(command);
return true;
}

因此我们没有到达 } else if (method instanceof Basic.Return) {从那里。
PublisherCallbackChannelImpl电话 handleNack对于那种情况,因此 - ConfirmCallback .

关于rabbitmq - Spring-rabbit - ReturnCallback 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com