RabbitMQ养成记 (7. 消息可靠性投递)

消息可靠性

什么是消息的可靠性呢??
简单来说就是 你的消息发放给 exchange 这个过程中 有可能丢失或者失败
这时候需要一个回调机制来监控 发送结果 必要时还要返回信息。

rabbitmq 给我们提供了两种:
首先是生产者到exchange发送过程的监控 ——confirm
然后是exchange到queue发送过程的监控 ——return


2种现在我们依次来代码实践一下:

  1. confirm
    首先 在配置里面加一个 publisher-confirms: true
spring:
  rabbitmq:
    host: 192.168.88.151
    username: guest
    password: guest
    virtual-host: /
    port: 5672
    publisher-confirms: true

然后java代码是这样:

   @Test
    public void testSend(){
        rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
            //注意这是一个回调方法 等发送完成之后 再调用确认

            /**
             *
              * @param correlationData 配置信息
             * @param b adc 代表了exchange是否收到了信息
             * @param s
             */
            @Override
            public void confirm(CorrelationData correlationData, boolean b, String s) {
                System.out.println("伟伟 confirm方法被执行了");
                
                if (b){
                    System.out.println("交换机接受成功"+s);
                }else{
                    System.out.println("交换机接受失败"+s);
                }
            }
        });
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.maru","boot mq hello aaa");
    }

看一下这个代码:
rabbitTemplate.setConfirmCallback()我们调用了这个方法,在里面用匿名内部类:(新手不懂匿名内部类的看这篇:)
来调用confirm方法 里面的第二个参数boolean 就是标志是否成功

  1. return

    /**
     *
     * Return 模式
     * 监控exchange到queue过程 失败则调用returnCallback
     */

    @Test
    public void testReturn(){

        rabbitTemplate.setMandatory(true);
        
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback(){

            @Override
            public void returnedMessage(Message message, int i, String s, String s1, String s2) {
                System.out.println("return 执行了");

            }
        });
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,"boot.maru","boot mq hello aaa");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值