zoukankan      html  css  js  c++  java
  • RabbitMQ 高级特性

    1.1 消息的可靠投递
    在使用 RabbitMQ 的时候,作为消息发送方希望杜绝任何消息丢失或者投递失败场景。RabbitMQ 为我们提供了两种方式用来控制消息的投递可靠性模式。

    confirm 确认模式
    return 退回模式
    rabbitmq 整个消息投递的路径为:

    producer—>rabbitmq-broker—>exchange—>queue—>consumer

    生产:消息从 producer 到 exchange 则会返回一个 confirmCallback()。都会执行,返回false就失败
    内部:消息从 exchange–>queue 投递失败则会返回一个 returnCallback()。
    我们将利用这两个 callback 控制消息的可靠性投递

    <!-- 定义rabbitmq connectionFactory -->
    <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
    port="${rabbitmq.port}"
    username="${rabbitmq.username}"
    password="${rabbitmq.password}"
    virtual-host="${rabbitmq.virtual-host}"
    publisher-confirms="true"
    />

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
    * 确认模式:
    * 步骤:
    * 1. 确认模式开启:ConnectionFactory中开启publisher-confirms="true"
    * 2. 在rabbitTemplate定义ConfirmCallBack回调函数
    */
    @Test
    public void testConfirm() {

    //2. 定义回调
    rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {
    /**
    * @param correlationData 相关配置信息
    * @param ack exchange交换机 是否成功收到了消息。true 成功,false代表失败
    * @param cause 失败原因
    */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
    if (ack) { //接收成功
    System.out.println("接收成功消息" + cause);
    } else { //接收失败。如何失败:交换机等配置错误
    System.out.println("接收失败消息" + cause);
    //做一些处理,让消息再次发送。
    }
    }
    });

    //3. 发送消息
    rabbitTemplate.convertAndSend("test_exchange_confirm111", "confirm", "message confirm....");
    }

    <!-- 定义rabbitmq connectionFactory -->
    <rabbit:connection-factory id="connectionFactory" host="${rabbitmq.host}"
    port="${rabbitmq.port}"
    username="${rabbitmq.username}"
    password="${rabbitmq.password}"
    virtual-host="${rabbitmq.virtual-host}"
    publisher-confirms="true"
    publisher-returns="true"
    />

  • 相关阅读:
    ET之快递测试法学习感悟20140922
    C#单元测试Nunit小结(20141018)
    oracle数据库导入导出09192255
    Mybatis-Configuration-详解
    Mybatis快速入门
    Ajax的学习笔记(一)
    php curl使用总结(一)
    ETL工具--DataX3.0实战
    SqlServer触发器的理解
    2017年的个人计划
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14577908.html
Copyright © 2011-2022 走看看