rabbitMq可靠性投递之配置(消息至交换机,至队列不通的回调)
2024-10-21 11:31:36
@Bean
public RabbitTemplate rabbitTemplate(CachingConnectionFactory factory) {
//若使用confirm-callback ,必须要配置publisherConfirms 为true
factory.setPublisherReturns(true);
//若使用return-callback,必须要配置publisherReturns为true
factory.setPublisherReturns(true);
RabbitTemplate rabbitTemplate = new RabbitTemplate(factory);
//使用return-callback时必须设置mandatory为true,或者在配置中设置mandatory-expression的值为true
rabbitTemplate.setMandatory(true); // 如果消息没有到exchange,则confirm回调,ack=false; 如果消息到达exchange,则confirm回调,ack=true
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if(ack){
System.out.println("消息发送成功:correlationData({}),ack({}),cause({})"+correlationData+":"+ack+":"+cause);
}else{
System.out.println("消息发送成功:correlationData({}),ack({}),cause({})"+correlationData+":"+ack+":"+cause);
}
}
}); //如果exchange到queue成功,则不回调return;如果exchange到queue失败,则回调return(需设置mandatory=true,否则不回回调,消息就丢了)
rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {
@Override
public void returnedMessage(ReturnedMessage returnedMessage) {
System.out.println("消息丢失:exchange({}),route({}),replyCode({}),replyText({}),message:{}"+JSON.toJSONString(returnedMessage));
}
});
return rabbitTemplate;
}
最新文章
- undefined method `environment' for nil:NilClass when importing Bootstrap into rails
- Python线程通信
- Border-radius属性--设置圆角边框
- 恶心的sbt 超级慢--解决
- 解决删除域用户Exception from HRESULT: 0x80072030
- 如何通过PowerShell在Visual Studio的Post-build中预热SharePoint站点
- geotools
- ListToDataTable
- PHP面试题三
- IIC-BUS INTERFACE
- 第一章:关于Ehcache
- Oracle的问题的解决
- netty入门(一)
- 洛谷P3038 [USACO11DEC]牧草种植Grass Planting
- 【转】Linux下查看系统配置
- 浏览器唤起APP的功能
- JavaScript弹出窗口方法
- [阮一峰]Linux 守护进程的启动方法
- 转 php 5.3.6中php-fpm 配置
- jmeter处理带表单的接口请求