RabbitMQ高级特性——消息的可靠性传递(2020年7月27日)

1 消息的可靠性传递

PS:以spring整合的rabbitmq项目为例

confirm——确认模式

步骤:
1、在配置文件定义要设置消息可靠性的队列并绑定交换机

    <!--    消息的可靠性传递-->
    <rabbit:queue id="test_queue_confirm" name="test_queue_confirm"></rabbit:queue>
    <!--    交换机绑定队列-->
    <rabbit:direct-exchange name="test_exchange_confirm">
        <rabbit:bindings>
            <rabbit:binding queue="test_queue_confirm" key="confirm"></rabbit:binding>
        </rabbit:bindings>
    </rabbit:direct-exchange>

2、开启确认模式
在这里插入图片描述

3、测试代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml")
public class producerTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
public void test(){
      
        //定义回调
    rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
        /*
        * CorrelationData correlationData, 配置相关信息
        * boolean b,交换机是否接受到了消息
        * String s,接受失败原因
        *
        * */
        @Override
        public void confirm(CorrelationData correlationData, boolean b, String s) {
            System.out.println("confirms--------");
            if (b) {
                System.out.println("success----");
            }else {
                System.out.println("failed-----"+s);
            }
        }
    });
      //发送消息
        rabbitTemplate.convertAndSend("test_exchange_confirm","confirm","confirm消息-----------");
}

作用:在发送消息到交换机可以判断是否发送成功,
	  根据发送成功与否在回调函数里做相关的业务操作。

return——回退模式

步骤:(前期准备基本和确认模式无异)
1、开启回退模式
在这里插入图片描述2、测试代码

   @Test
    public void test2() {


//回退模式:消息发给Exchange成功后,由Exchange路由到queue失败了才会执行回调函数

        //交换机处理失败消息的模式:1、直接丢弃       2、返回消息给发送方returnCallBack
        rabbitTemplate.setMandatory(true);//设置则是返回消息给发送方returnCallBack,不设置则直接丢弃


        //设置ReturnCallBack回调函数
        rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {
            @Override
            public void returnedMessage(Message message, int i, String s, String s1, String s2) {
                System.out.println("回调函数执行-----");
            }
        });

        //发送消息
        rabbitTemplate.convertAndSend("test_exchange_confirm", "confirm11", "confirm消息-----------");

    }
    作用:如果交换机路由到queue失败了,消息会返回到returnCallBack,
    在回调函数的参数里可以获取到消息的相关信息,比如信息体、路由键。。。
    再做相关的业务操作,这就是return的作用

说说两种模式的区别:confirm是消息传给交换机失败执行;return是消息从交换机传递给queue执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值