当我用以下配置消息路由失败不会触发returncallback
@Configuration
public class RabbitMqConfig {
@Bean
RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setReturnsCallback(returned -> {
System.out.println("message = " + returned.getMessage());
System.out.println("exchange = " + returned.getExchange());
System.out.println("replyText = " + returned.getReplyText());
System.out.println("routingKey = " + returned.getRoutingKey());
System.out.println("replyCode = " + returned.getReplyCode());
});
return rabbitTemplate;
}
}
当我换成以下配置时就会生效,请指点原因
@Configuration
public class RabbitMqConfig {
@Autowired
RabbitTemplate rabbitTemplate;
@PostConstruct
void rabbitTemplate(){
rabbitTemplate.setReturnsCallback(returned -> {
System.out.println("message = " + returned.getMessage());
System.out.println("exchange = " + returned.getExchange());
System.out.println("replyText = " + returned.getReplyText());
System.out.println("routingKey = " + returned.getRoutingKey());
System.out.println("replyCode = " + returned.getReplyCode());
});
}
}
1.没有开启mandatory参数
在发送消息时,需要设置mandatory参数为true才能触发returncallback回调函数。如果没有设置该参数,即使消息无法路由到任何队列,也不会触发回调函数。
2.消息路由到了队列中
如果消息成功路由到了队列中,而不是无法路由到任何队列,那么returncallback回调函数也不会被触发。
3.Rabbitmq版本问题
在某些版本的Rabbitmq中,returncallback回调函数可能存在一些bug,导致无法触发回调函数。可以尝试升级Rabbitmq版本或者使用其他的消息中间件。