10-RabbitMQ-路由和主题模式

概述

Topic 类型的Exchange与Direct相比,都是可以根据 RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!这种模式Routingkey 一般都是由一个或多个单词组成,多个单词之间以 ”.” 分割,例如: item.insert

  • # 统配符
  • * (star) can substitute for exactly one word:匹配不多不少恰好1个词
  • # (hash) can substitute for zero or more words:匹配0个或多个词

# 示例如下所示:

audit.#:匹配 audit.irs.corporate 或者 audit.irs 等

audit.*:只能匹配 audit.irs

创建生产者

java
/**
 * @author: BNZeng
 */
public class Producer {

    @Test
    public void sendMessage() throws Exception {
        Connection connection = RabbitMQUtil.getConnection();

        Channel channel = connection.createChannel();

        String exchangeName = "topic";

        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC);

        // 声明一个路由 key
        String routingKey = "user";

        channel.basicPublish(exchangeName, routingKey, null, ("我是一个topic类型的交换机消息 + routingKey = " + routingKey).getBytes());

        System.out.println("消息发送成功");

        RabbitMQUtil.closeChannelAndConnection(channel, connection);
    }
}

创建消费者 1

java
/**
 * @author BNZeng
 */
public class Consumer1 {

    @Test
    public void receiveMessage() throws Exception {

        Connection connection = RabbitMQUtil.getConnection();

        Channel channel = connection.createChannel();

        String exchangeName = "topic";

        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC);

        // 得到一个临时队列
        String queue = channel.queueDeclare().getQueue();

        // 绑定队列到交换机
        channel.queueBind(queue, exchangeName, "user.*");

        // 消费消息
        channel.basicConsume(queue, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者【1】收到消息" + new String(body));
            }
        });

        System.in.read();
    }
}

创建消费者 2

java
/**
 * @author BNZeng
 */
public class Consumer2 {

    @Test
    public void receiveMessage() throws Exception {
        Connection connection = RabbitMQUtil.getConnection();

        Channel channel = connection.createChannel();

        String exchangeName = "topic";

        channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC);

        // 得到一个临时队列
        String queue = channel.queueDeclare().getQueue();

        // 绑定队列到交换机
        channel.queueBind(queue, exchangeName, "user.#");

        // 消费消息
        channel.basicConsume(queue, new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println("消费者【2】收到消息" + new String(body));
            }
        });

        System.in.read();
    }
}

测试

先启动消费者1和消费者2,再分别发送routingKey=user和user.add和user.add.insert等类型的消息。查看结果即可。

posted @   鱼檬檬  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
  1. 1 缓缓 杜宣达
  2. 2 乌梅子酱 李荣浩
  3. 3 Plain Jane(Remix 13z) 鱼幼微
  4. 4 放空 大籽/Lil E/A1 TRIP
  5. 5 银河与星斗 yihuik苡慧
  6. 6 坏女孩 徐良/小凌
  7. 7 假面舞会 很美味
  8. 8 你画的彩虹 姜洋
  9. 9 不再犹豫 Beyond
  10. 10 童话 光良
  11. 11 不可撤销乐队
  12. 12 山楂树之恋 程佳佳
  13. 13 夏天的风 火羊瞌睡了
  14. 14 老人与海 苗田雨
  15. 15 爸爸妈妈 李荣浩
  16. 16 樱花草 (翻自 sweety) 苏白睡醒啦
  17. 17 是想你的声音啊 傲七爷(江偌绮)
  18. 18 Love Story Taylor Swift
  19. 19 晚风 7opy/BT07
  20. 20 错位时空 艾辰
  21. 21 千千万万 深海鱼子酱
  22. 22 给你呀(又名:for ya) 蒋小呢
  23. 23 把回忆拼好给你 王贰浪
  24. 24 万有引力 F*yy
  25. 25 沉醉的青丝 (想你 念你dj版) 曲甲
  26. 26 太多 阿冗
  27. 27 7710 好乐无荒/尹露浠
  28. 28 恋爱画板 锦零
  29. 29 My Cookie Can Ayi
  30. 30 日不落(温柔版)
坏女孩 - 徐良/小凌
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

编曲 : 徐良

作词 : 徐良

作曲 : 徐良

I miss you

Now

don't you love me

Sorry I'm so sorry

徐良:

那时我放开了的手

转过身只剩了保重

你话都没说却哭了很久很久

我喜欢坏坏的女友

我喜欢刺激的感受

你单纯太过多余了那些温柔

你消失在无名大街

从此就没有再见面

好长的时间再没有你的来电

在后来酒吧的房间

舞池里跳动着音乐

熟悉的侧脸喂

迷人的笑脸吸引视线

慵懒的靠在陌生的肩

黑色的眼线你的指间

有一点轻蔑

小凌:

在谁的怀中会有感觉

被爱的深夜我在想念

明明是为你才会改变

却回不到从前

徐良:

那时我放开了的手

转过身只剩了保重

你话都没说却哭了很久很久

我喜欢坏坏的女友

我喜欢刺激的感受

你单纯太过多余了那些温柔

你消失在无名大街

从此就没有再见面

好长的时间再没有你的来电

在后来酒吧的房间

舞池里跳动着音乐

熟悉的侧脸喂

迷人的笑脸吸引视线

慵懒的靠在陌生的肩

黑色的眼线你的指间

有一点轻蔑

小凌:

在谁的怀中会有感觉

被爱的深夜我在想念

明明是为你才会改变

却回不到从前

徐良:

然后我安静的发现

两个人已经没有任何语言

曾经你纯真的永远

让我不顾一切开始怀念

迷人的笑脸吸引视线

慵懒的靠在陌生的肩

黑色的眼线你的指间

有一点轻蔑

小凌:

在谁的怀中会有感觉

被爱的深夜我在想念

明明是为你才会改变

却回不到从前

点击右上角即可分享
微信分享提示