RabbitMQ学习(四)-- 消息的可靠性投递

本文详细介绍了Spring RabbitMQ中确认(confirm)和回退(return)模式的配置与使用。在confirm模式下,配置publisher-confirm-type为correlated,并设置确认回调方法来处理消息发送结果。在return模式中,通过设置publisher-returns为true和returnCallback来处理无法路由到队列的消息。测试结果显示了不同情况下的日志输出。

目录

 

一、confirm模式

1、配置

2、添加callback回调方法

3、测试结果

二、return 模式

1、配置

2、添加returnCallBack代码

3、测试结果


一、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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值