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"
    />

  • 相关阅读:
    98.公共汽车
    100.选菜(动态规划)01背包
    102.愤怒的LJF
    96.老鼠的旅行(动态规划)
    95.(01背包)之小吃
    94.Txx考试
    93.数字三角形W(深搜)
    POJ 3352 Road Construction (边双连通分量)
    POJ 3114 Countries in War(强联通分量+Tarjan)
    POJ 3592 Instantaneous Transference(强联通分量 Tarjan)
  • 原文地址:https://www.cnblogs.com/vincentmax/p/14577908.html
Copyright © 2011-2022 走看看