AMQP-RabbitMQ/4/路由模式

4. 路由模式 Routing

  • 圖示
    路由模式

# 個人理解

  • 生產者定義Exchange,設置類型爲direct。將消息發送給Exchange之前,爲每條消息指定路由鍵

  • 消費者定義隊列Queue,並將隊列與Exchange進行綁定,在綁定的時候需要告訴Exchange,當前這個Queue接受的路由鍵。

  • 消息由Exchange發送給Queue時,消息的routingKey必須與該隊列訂閱的routingKey完全匹配

  • 即:相對於Exchange爲fanout模式的全量接受,direct模式只是根據路由鍵部分接收Exchange中的消息

  • 生產者

package com.futao.springmvcdemo.mq.rabbit.routing;

import com.futao.springmvcdemo.mq.rabbit.ExchangeTypeEnum;
import com.futao.springmvcdemo.mq.rabbit.RabbitMqConnectionTools;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import lombok.Cleanup;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

/**
 * 路由模式-生產者
 *
 * @author futao
 * Created on 2019-04-22.
 */
@Slf4j
public class Producer {
    @SneakyThrows
    public static void main(String[] args) {
        @Cleanup
        Connection connection = RabbitMqConnectionTools.getConnection();
        @Cleanup
        Channel channel = connection.createChannel();
        //定義交換器類型
        channel.exchangeDeclare(ExchangeTypeEnum.DIRECT.getExchangeName(), BuiltinExchangeType.DIRECT);
        String msg = "Hello RabbitMq!";
      //向名爲爲`myExchangeType-direct`,類型爲`direct`的Exchange發送20條routingKey爲`log.info`的消息
        for (int i = 0; i < 20; i++) {
            channel.basicPublish(ExchangeTypeEnum.DIRECT.getExchangeName(), "log.info", null, (msg + i + "log.info").getBytes());
            log.info("Send msg:[{}] ,routingKey:[{}] success", (msg + i + "log.info"), "log.info");
        }
 //向名爲爲`myExchangeType-direct`,類型爲`direct`的Exchange發送20條routingKey爲`log.error`的消息
        for (int i = 0; i < 10; i++) {
            channel.basicPublish(ExchangeTypeEnum.DIRECT.getExchangeName(), "log.error", null, (msg + i + "log.error").getBytes());
            log.info("Send msg:[{}] ,routingKey:[{}] success", (msg + i + "log.error"), "log.error");
        }
    }
}
  • 消費者1(同時訂閱路由key爲"log.info"和"log.error"的消息)
package com.futao.springmvcdemo.mq.rabbit.routing;

import com.futao.springmvcdemo.mq.rabbit.ExchangeTypeEnum;
import com.futao.springmvcdemo.mq.rabbit.RabbitMqConnectionTools;
import com.futao.springmvcdemo.mq.rabbit.RabbitMqQueueEnum;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

/**
 * 路由模式-消費者1
 *
 * @author futao
 * Created on 2019-04-22.
 */
@Slf4j
public class ConsumerOne {
    @SneakyThrows
    public static void main(String[] args) {
        Channel channel = RabbitMqConnectionTools.getChannel();
        //開啓持久化隊列
        boolean durable = true;
        channel.queueDeclare(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_ONE.getQueueName(), durable, false, false, null);
        //定義交換器類型
        channel.exchangeDeclare(ExchangeTypeEnum.DIRECT.getExchangeName(), BuiltinExchangeType.DIRECT);
        //將消息隊列與Exchange交換器與路由鍵綁定(同時訂閱路由key爲"log.info"和"log.error"的消息)
        channel.queueBind(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_ONE.getQueueName(), ExchangeTypeEnum.DIRECT.getExchangeName(), "log.error");
        channel.queueBind(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_ONE.getQueueName(), ExchangeTypeEnum.DIRECT.getExchangeName(), "log.info");
        //告訴rabbitmq一次只發送一條消息,並且在前一個消息未被處理或者消費之前,不繼續發送下一個消息
        channel.basicQos(1);
        log.info("Waiting for message...");
        DeliverCallback deliverCallback = ((consumerTag, message) -> {
            log.info("收到消息:[{}],routingKey:[{}],tag:[{}]", new String(message.getBody()), message.getEnvelope().getRoutingKey(), consumerTag);
            //acknowledgment應答
            channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
            try {
                Thread.sleep(1000);
            } catch (Exception e) {

            }
        });
        //關閉自動應答
        boolean autoAck = false;
        channel.basicConsume(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_ONE.getQueueName(), autoAck, deliverCallback, consumerTag -> {
        });
    }
}
  • 消費者2(只訂閱路由key爲"log.error"的消息)
package com.futao.springmvcdemo.mq.rabbit.routing;

import com.futao.springmvcdemo.mq.rabbit.ExchangeTypeEnum;
import com.futao.springmvcdemo.mq.rabbit.RabbitMqConnectionTools;
import com.futao.springmvcdemo.mq.rabbit.RabbitMqQueueEnum;
import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

/**
 * 路由模式-消費者2
 *
 * @author futao
 * Created on 2019-04-22.
 */
@Slf4j
public class ConsumerTwo {
    @SneakyThrows
    public static void main(String[] args) {
        Channel channel = RabbitMqConnectionTools.getChannel();
        //開啓持久化隊列
        boolean durable = true;
        channel.queueDeclare(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_TWO.getQueueName(), durable, false, false, null);
        //定義交換器類型
        channel.exchangeDeclare(ExchangeTypeEnum.DIRECT.getExchangeName(), BuiltinExchangeType.DIRECT);
        //將消息隊列與Exchange交換器進行綁定(只訂閱路由key爲"log.error"的消息)
        channel.queueBind(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_TWO.getQueueName(), ExchangeTypeEnum.DIRECT.getExchangeName(), "log.error");
        //告訴rabbitmq一次只發送一條消息,並且在前一個消息未被處理或者消費之前,不繼續發送下一個消息
        channel.basicQos(1);
        log.info("Waiting for message...");
        DeliverCallback deliverCallback = ((consumerTag, message) -> {
            log.info("收到消息:[{}],routingKey:[{}],tag:[{}]", new String(message.getBody()), message.getEnvelope().getRoutingKey(), consumerTag);
            //acknowledgment應答
            channel.basicAck(message.getEnvelope().getDeliveryTag(), false);
            try {
                Thread.sleep(2000);
            } catch (Exception e) {

            }
        });
        //關閉自動應答
        boolean autoAck = false;
        channel.basicConsume(RabbitMqQueueEnum.EXCHANGE_QUEUE_DIRECT_TWO.getQueueName(), autoAck, deliverCallback, consumerTag -> {
        });
    }
}
  • 測試
>>> 生產者
17:35:22.151 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!0log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!1log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!2log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!3log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!4log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!5log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!6log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!7log.info] ,routingKey:[log.info] success
17:35:22.156 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!8log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!9log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!10log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!11log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!12log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!13log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!14log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!15log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!16log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!17log.info] ,routingKey:[log.info] success
17:35:22.157 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!18log.info] ,routingKey:[log.info] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!19log.info] ,routingKey:[log.info] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!0log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!1log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!2log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!3log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!4log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!5log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!6log.error] ,routingKey:[log.error] success
17:35:22.158 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!7log.error] ,routingKey:[log.error] success
17:35:22.159 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!8log.error] ,routingKey:[log.error] success
17:35:22.159 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.Producer - Send msg:[Hello RabbitMq!9log.error] ,routingKey:[log.error] success
Disconnected from the target VM, address: '127.0.0.1:58582', transport: 'socket'

> 消費者1-同時訂閱了路由鍵爲`log.info`和`log.error`的消息

17:35:15.737 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - Waiting for message...
17:35:22.153 [pool-1-thread-4] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!0log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:23.157 [pool-1-thread-5] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!1log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:24.162 [pool-1-thread-6] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!2log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:25.167 [pool-1-thread-7] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!3log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:26.173 [pool-1-thread-8] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!4log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:27.176 [pool-1-thread-9] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!5log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:28.179 [pool-1-thread-10] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!6log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:29.184 [pool-1-thread-11] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!7log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:30.190 [pool-1-thread-12] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!8log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:31.191 [pool-1-thread-13] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!9log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:32.195 [pool-1-thread-14] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!10log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:33.201 [pool-1-thread-15] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!11log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:34.203 [pool-1-thread-16] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!12log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:35.208 [pool-1-thread-17] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!13log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:36.211 [pool-1-thread-18] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!14log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:37.215 [pool-1-thread-19] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!15log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:38.222 [pool-1-thread-20] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!16log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:39.226 [pool-1-thread-21] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!17log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:40.229 [pool-1-thread-22] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!18log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:41.233 [pool-1-thread-23] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!19log.info],routingKey:[log.info],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:42.239 [pool-1-thread-24] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!0log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:43.243 [pool-1-thread-25] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!1log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:44.248 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!2log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:45.253 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!3log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:46.258 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!4log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:47.259 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!5log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:48.259 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!6log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:49.261 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!7log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:50.262 [pool-1-thread-26] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!8log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]
17:35:51.262 [pool-1-thread-9] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerOne - 收到消息:[Hello RabbitMq!9log.error],routingKey:[log.error],tag:[amq.ctag-69-YK4fbdRWsRxpVYI280A]

> 消費者2-只訂閱了路由鍵爲`log.error`的消息
17:35:18.722 [main] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - Waiting for message...
17:35:22.161 [pool-1-thread-4] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!0log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:24.164 [pool-1-thread-5] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!1log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:26.167 [pool-1-thread-6] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!2log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:28.173 [pool-1-thread-7] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!3log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:30.179 [pool-1-thread-8] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!4log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:32.184 [pool-1-thread-9] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!5log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:34.189 [pool-1-thread-10] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!6log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:36.191 [pool-1-thread-11] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!7log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:38.192 [pool-1-thread-12] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!8log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
17:35:40.195 [pool-1-thread-13] INFO com.futao.springmvcdemo.mq.rabbit.routing.ConsumerTwo - 收到消息:[Hello RabbitMq!9log.error],routingKey:[log.error],tag:[amq.ctag-IkbrVC8PYMJLwVuD8k6vSg]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章