RabbitMQ的Fanout交换机

Fanout交换机

Fanout,英文翻译是扇出,我觉得在MQ中叫广播更合适。

在广播模式下,消息发送流程是这样的:

  • 1) 可以有多个队列
  • 2) 每个队列都要绑定到Exchange(交换机)
  • 3) 生产者发送的消息,只能发送到交换机
  • 4) 交换机把消息发送给绑定过的所有队列
  • 5) 订阅队列的消费者都能拿到消息

我们的计划是这样的:

  • 创建一个名为 hmall.fanout的交换机,类型是Fanout
  • 创建两个队列fanout.queue1fanout.queue2,绑定到交换机hmall.fanout

3.5.1.声明队列和交换机(案例练习)

利用SpringAMQP演示FanoutExchange的使用

在控制台创建队列fanout.queue1:

在创建一个队列fanout.queue2

然后再创建一个交换机:

然后绑定两个队列到交换机:

3.5.2.消息发送

在publisher服务的SpringAmqpTest类中添加测试方法:

java 复制代码
    /**
     * 向新声明的交换机发送消息(hmall.fanout)
     */
    @Test
    public void testFanoutExchange() {
        // 交换机名称
        String exchangeName = "hmall.fanout";
        // 消息
        String message = "hello, everyone!";
        rabbitTemplate.convertAndSend(exchangeName, null, message);
    }

3.5.3.消息接收

在consumer服务的SpringRabbitListener中添加两个方法,作为消费者:

java 复制代码
    /**
     * 接受hmall.fanout的消息
     * @param msg
     */
    @RabbitListener(queues = "fanout.queue1")
    public void listenFanoutQueue1(String msg) {
        System.out.println("消费者1所在的fanout.queue1接收到Fanout消息:【" + msg + "】");
    }

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

3.5.4.总结

交换机的作用是什么?

  • 接收publisher发送的消息
  • 将消息按照规则路由到与之绑定的队列
  • 不能缓存消息,路由失败,消息丢失
  • FanoutExchange的会将消息路由到每个绑定的队列
相关推荐
学无止境_永不停歇4 小时前
从零手写高性能 C++ TCP 服务器框架(一):项目介绍
linux·服务器·c++·中间件
phltxy6 小时前
RabbitMQ SpringBoot消息队列与应用间通信
spring boot·rabbitmq·java-rabbitmq
过期动态6 小时前
【RabbitMQ高级篇】生产者可靠性、MQ可靠性、消费者可靠性以及延迟队列的实现
java·数据结构·分布式·算法·rabbitmq·ruby
超梦dasgg17 小时前
Java 生产环境 MQ 技术选型全解析
java·开发语言·java-rocketmq·java-rabbitmq
哎呦,帅小伙哦1 天前
Nanomsg中间件utils中部分工具学习记录
学习·中间件·nanomsg
phltxy1 天前
RabbitMQ 工作模式与Java原生客户端案例
java·rabbitmq·java-rabbitmq
装不满的克莱因瓶1 天前
【项目亮点四】支付订单超时处理与状态补偿机制设计
java·开发语言·后端·rabbitmq·消息中间件
毋语天1 天前
FastAPI 终极实战:ORM 数据库、RESTful 设计、中间件与依赖注入
数据库·中间件·restful·fastapi
开开心心就好1 天前
免费无广告的批量卸载与系统清理工具
linux·服务器·网络·智能手机·rabbitmq·excel·memcached
Devin~Y2 天前
大厂Java面试实录:Spring Boot微服务 + Redis缓存 + Kafka消息队列 + Prometheus链路追踪 + RAG向量检索
java·spring boot·redis·spring cloud·kafka·rabbitmq·spring mvc