• RabbitMQ - 04 - Fanout交换机 (广播)


    目录

    部署demo项目

    什么是Fanout交换机

    实现Fanout交换机

    1.控制台

    声明队列

    声明交换机

    将交换机与队列绑定

    2.编写消费者方法

    3.编写生产者测试方法


    部署demo项目

    通过消息队列demo项目进行练习  相关配置看此贴   http://t.csdnimg.cn/hPk2T

    注意  生产者消费者的yml文件也要配置好

    什么是Fanout交换机

            Fanout 交换机是 AMQP(高级消息队列协议)中的一种交换机类型,它将消息广播到所有与该交换机绑定的队列上。无论消息发送者将消息发送到哪个队列,所有绑定到该 Fanout 交换机的队列都会收到相同的消息副本。

            Fanout 交换机常用于需要广播消息给多个消费者的场景,例如发布订阅模式中的订阅者通常会使用 Fanout 交换机来接收发布者发送的消息。在 RabbitMQ 中,Fanout 交换机是其中一种常见的交换机类型,提供了简单且有效的消息广播机制。

    Fanout 交换机的特点包括:

    1. 广播消息:Fanout 交换机会将消息广播到所有与之绑定的队列,无视消息的路由键。
    2. 简单配置:不需要对消息进行路由规则匹配,只需将队列绑定到 Fanout 交换机即可。
    3. 适用广泛:适用于需要一次性将消息发送给多个消费者的场景,如日志广播、实时通知等。

    实现Fanout交换机

    1.控制台

    声明队列

    声明交换机

    将交换机与队列绑定

    2.编写消费者方法

    1. package cn.itcast.mq.lintener;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.amqp.rabbit.annotation.RabbitListener;
    4. import org.springframework.stereotype.Component;
    5. @Slf4j
    6. @Component
    7. public class MQListener {
    8. @RabbitListener(queues = "fanout.queue1")
    9. public void listenFanoutQueue1(String message) {
    10. log.info("消费者1收到了消息:........... {}", message);
    11. // System.out.println("消费者收到了消息: " + message);
    12. }
    13. @RabbitListener(queues = "fanout.queue2")
    14. public void listenFanoutQueue2(String message) {
    15. log.info("消费者2收到了消息: {}", message);
    16. // System.out.println("消费者收到了消息: " + message);
    17. }
    18. }

    3.编写生产者测试方法

    1. package cn.itcast.mq.helloworld;
    2. import org.apache.logging.log4j.message.Message;
    3. import org.junit.jupiter.api.Test;
    4. import org.springframework.amqp.rabbit.core.RabbitTemplate;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.boot.test.context.SpringBootTest;
    7. import org.springframework.messaging.converter.StringMessageConverter;
    8. @SpringBootTest
    9. public class SpringAMQPTest {
    10. @Autowired
    11. private RabbitTemplate rabbitTemplate;
    12. // fanout交换机
    13. @Test
    14. void testFanoutExchange(){
    15. String exchangeName = "hmall.fanout";
    16. String message = "hello, fanout 交换机";
    17. rabbitTemplate.convertAndSend(exchangeName,"", message);
    18. }
    19. }

    成功向两个消费者广播了同一条消息

  • 相关阅读:
    DP4398:国产兼容替代CS4398立体声24位/192kHz音频解码芯片
    【Linux精讲系列】——yum软件包管理
    el-table滚动条设置
    python __getitem__()方法理解 python之使用魔术方法__getitem__和__len__
    MySQL的存储引擎
    二叉树的树状打印(Java)
    [leetcode hot 150]第十一题,盛水最多的容器
    React三属性之:state
    数据库学习之库的操作
    5分钟明白LangChain 的输出解析器和链
  • 原文地址:https://blog.csdn.net/weixin_60257917/article/details/136600771