目录
一、confirm模式
1、配置
在新版rabbitMQ中,publish-confirms配置过时了,如果要使用confirm模式,则使用如下配置
publisher-confirm-type: correlated
即
spring:
redis:
host: 10.211.55.7
port: 6379
password: Ebe1tech/Passw0rd
redssion:
threads: 4
rabbitmq:
addresses: 10.211.55.7
port: 5672
username: guest
password: guest
virtual-host: /
publisher-confirm-type: correlated
2、添加callback回调方法
rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
/**
*
* @param correlationData 相关配置信息
* @param ack exchange交换机是否正常收到消息,true 收到|false 失败
* @param cause 失败原因
*/
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
log.info("correlationData:"+correlationData);
log.info("ack:"+ack);
log.info("cause:"+cause);
}
});
3、测试结果
020-12-15 23:17:00,155 ERROR (CachingConnectionFactory.java:1575)- Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'hehe' in vhost '/', class-id=60, method-id=40)
2020-12-15 23:17:00,157 INFO (RabbitMQController.java:34)- correlationData:null
2020-12-15 23:17:00,158 INFO (RabbitMQController.java:35)- ack:false
2020-12-15 23:17:00,158 INFO (RabbitMQController.java:36)- cause:channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no exchange 'hehe' in vhost '/', class-id=60, method-id=40)
二、return 模式
1、配置
spring:
redis:
host: 10.211.55.7
port: 6379
password: Ebe1tech/Passw0rd
redssion:
threads: 4
rabbitmq:
addresses: 10.211.55.7
port: 5672
username: guest
password: guest
virtual-host: /
publisher-returns: true
2、添加returnCallBack代码
/**
* 回退模式
* 当消息发送给exchange后,exchange路由到Queue失败,才会执行ReturnCallBack
* 要设置Exchange处理消息的模式两种:
* 1。如果没有路由到Queue,则丢弃消息
* 2。如果没有路由到Queue,则返回消息发送方ReturnCallBack
*/
rabbitTemplate.setMandatory(true);//设置处理消息的模式
rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
/**
*
* @param message 消息体
* @param replyCode 错误代码
* @param replyText 错误内容
* @param exchange 交换机
* @param routingKey 路由key
*/
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
log.info("message:"+message);
log.info("replyCode:"+replyCode);
log.info("replyText:"+replyText);
log.info("exchange:"+exchange);
log.info("routingKey:"+routingKey);
}
});
//rabbitTemplate.convertAndSend(EXCHANGE_NAME,"boot.hahah","hello spring boot rabbitMQ!~~~~~~~");
//rabbitTemplate.convertAndSend("hehe","boot.hahah","hello spring boot rabbitMQ!~~~~~~~");
rabbitTemplate.convertAndSend(EXCHANGE_NAME,"boot122.hahah","hello spring boot rabbitMQ!~~~~~~~");
3、测试结果
2020-12-15 23:29:13,301 INFO (RabbitMQController.java:57)- message:(Body:'hello spring boot rabbitMQ!~~~~~~~' MessageProperties [headers={}, contentType=text/plain, contentEncoding=UTF-8, contentLength=0, receivedDeliveryMode=PERSISTENT, priority=0, deliveryTag=0])
2020-12-15 23:29:13,302 INFO (RabbitMQController.java:58)- replyCode:312
2020-12-15 23:29:13,302 INFO (RabbitMQController.java:59)- replyText:NO_ROUTE
2020-12-15 23:29:13,302 INFO (RabbitMQController.java:60)- exchange:boot_topic_exchange
2020-12-15 23:29:13,303 INFO (RabbitMQController.java:61)- routingKey:boot122.hahah