当前位置: 首页 > news >正文

RabbitMQ交换机

1. 交换机类型

在这里插入图片描述

  • Publisher:生产者,发送消息到交换机
  • Exchange:交换机,一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!
  • Queue:消息队列,接收消息、缓存消息。不过队列一定要与交换机绑定
  • Consumer:消费者,订阅队列

交换机的类型有四种:

  • Fanout:广播,将消息交给所有绑定到交换机的队列。
  • Direct:订阅,基于RoutingKey(路由key)发送给订阅了消息的队列。
  • Topic:通配符订阅,与Direct类似,只不过RoutingKey可以使用通配符。
  • Headers:头匹配,基于MQ的消息头匹配,用的较少。

2. Fanout交换机

在这里插入图片描述

2.1 声明队列和交换机

添加队列fanout.queue1
在这里插入图片描述

添加队列fanout.queue2在这里插入图片描述

添加交换机harry.fanout
添加交换机
绑定队列
在这里插入图片描述

2.2 发送消息

@Test
public void testFanoutExchange() {
    // 交换机名称
    String exchangeName = "harry.fanout";
    // 消息
    String message = "hello, everyone!";
    rabbitTemplate.convertAndSend(exchangeName, "", message);
}

2.3 接收消息

@Component
public class FanoutConsumer {
    @RabbitListener(queues = "fanout.queue1")
    public void listenFanoutQueue1(String msg) {
        System.out.println("消费者1接收到Fanout消息:【" + msg + "】");
    }

    @RabbitListener(queues = "fanout.queue2")
    public void listenFanoutQueue2(String msg) {
        System.out.println("消费者2接收到Fanout消息:【" + msg + "】");
    }
}

3. Direct交换机

在这里插入图片描述

2.1 声明队列和交换机

添加队列direct.queue1
添加队列direct.queue2
在这里插入图片描述

添加交换机harry.direct
绑定队列
在这里插入图片描述
在这里插入图片描述

2.2 发送消息

@Test
public void testSendDirectExchange1() {
    // 交换机名称
    String exchangeName = "harry.direct";
    // 消息
    String message = "红色信息!";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "red", message);
}
@Test
public void testSendDirectExchange2() {
    // 交换机名称
    String exchangeName = "harry.direct";
    // 消息
    String message = "蓝色信息!";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "blue", message);
}
@Test
public void testSendDirectExchange3() {
    // 交换机名称
    String exchangeName = "harry.direct";
    // 消息
    String message = "绿色信息!";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "green", message);
}

2.3 接收消息

@Component
public class FanoutConsumer {
    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueue1(String msg) {
        System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】");
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueue2(String msg) {
        System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】");
    }
}

4. Topic交换机

通配符规则:

  • #:匹配一个或多个词
  • *:匹配不多不少恰好1个词

举例:

  • item.#:能够匹配item.spu.insert 或者 item.spu
  • item.*:只能匹配item.spu
    在这里插入图片描述

2.1 声明队列和交换机

添加队列direct.queue1
添加队列direct.queue2
添加交换机harry.direct
绑定队列
在这里插入图片描述

2.2 发送消息

@Test
public void testSendTopicExchange() {
    // 交换机名称
    String exchangeName = "harry.topic";
    // 消息
    String message = "发送消息到routingKey: china.news!";
    // 发送消息
    rabbitTemplate.convertAndSend(exchangeName, "china.news", message);
}

2.3 接收消息

@Component
public class FanoutConsumer {
    @RabbitListener(queues = "topic.queue1")
    public void listenTopicQueue1(String msg) {
        System.out.println("消费者1接收到topic.queue1的消息:【" + msg + "】");
    }

    @RabbitListener(queues = "topic.queue2")
    public void listenTopicQueue2(String msg) {
        System.out.println("消费者2接收到topic.queue2的消息:【" + msg + "】");
    }
}
http://www.dtcms.com/a/8334.html

相关文章:

  • 融资项目——获取树形结构的数据
  • MyBatis之Like模糊查询的两种实现方式
  • A股上市以来涨幅排行榜
  • 2024刘谦春晚第二个扑克牌魔术
  • [Python进阶] 识别验证码
  • tkinter-TinUI-xml实战(10)展示画廊
  • 第三百一十回
  • JUnit实践教程——Java的单元测试框架
  • c语言贪食蛇游戏
  • python Flask与微信小程序 统计管理
  • 【Linux学习】生产者-消费者模型
  • 【FPGA】VHDL:八段码到8421BCD码转换电路
  • idea:如何连接数据库
  • Nacos 的配置管理和配置热更新
  • 鸿蒙内核框架
  • Cohere For AI 推出了 Aya,这是一款覆盖超过 100 种语言的大型语言模型(LLM)
  • MATLAB实现朴素贝叶斯分类
  • Mysql报错:too many connections
  • PyTorch detach():深入解析与实战应用
  • Javaweb之SpringBootWeb案例之AOP概述及入门的详细解析
  • 双非本科准备秋招(19.2)—— 设计模式之保护式暂停
  • 每日一个脚本之一键部署Docker
  • 一、DataX简介
  • MCU+SFU视频会议一体化,视频监控,指挥调度(AR远程协助)媒体中心解决方案。
  • C/C++内存管理:new、delete功能及原理实现
  • redis-sentinel(哨兵模式)
  • Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件
  • Redis持久化、主从与哨兵架构详解
  • C++入门
  • 嵌入式硬件工程师与嵌入式软件工程师