• DirectExchange交换机简单入门demo


    源码在文章末尾👇🏻

    前置学习知识

    1. FanoutExchange交换机代码教程 SpringAMQP 简单入门demod​​​​​​​2

    了解过Fanout交换机的同学就一定知道, 在给Fanout交换机发送消息的时候只需要指定交换机的名称, 和要发送的消息即可, 并且可以指定多个队列  FanoutExchange交换机代码教程

    1. @Test
    2. public void testSendFanoutExchange() {
    3. // 交换机名称
    4. String exchangeName = "声明FanoutExchange交换机";
    5. // 消息
    6. String message = "测试 FanoutExchange 交换机, 请各位接收 !";
    7. rabbitTemplate.convertAndSend(exchangeName, "", message);
    8. }

    下面我们要学习的Direct交换机的区别, 和Fanout很相似, 但是唯一不同的就是每一个Queue都与Exchange设置一个BindingKey, 而且在发布消息的时候也需要指定消息的RoutingKey

    下面我们用代码演示一下

    1. @RabbitListener(bindings = @QueueBinding(
    2. //队列名称
    3. value = @Queue("direct.queue1"),
    4. //交换机名称
    5. exchange = @Exchange(value = "direct", type = ExchangeTypes.DIRECT),
    6. //key
    7. key = {"red", "blue"}
    8. ))
    9. public void listenDirectQueue1(String msg){
    10. System.out.println("消费者接收到fanout.queue1的消息:【" + msg + "】");
    11. }
    12. @RabbitListener(bindings = @QueueBinding(
    13. value = @Queue("direct.queue2"),
    14. exchange = @Exchange(value = "direct"),
    15. key = {"red", "yellow"}
    16. ))
    17. public void listenDirectQueue2(String msg){
    18. System.out.println("消费者接收到fanout.queue1的消息:【" + msg + "】");
    19. }

    案例1 key的值为blue

    1. @Test
    2. public void testSendDirectExchange() {
    3. // 交换机名称
    4. String exchangeName = "direct";
    5. // 消息
    6. String red = "hello, blue!";
    7. rabbitTemplate.convertAndSend(exchangeName, "blue", red);
    8. }

    运行结果 :

     解析: 

    其实原因很简单 在我们的QueueBinding中声明的key中包含了 "blue"

     案例2 key值为red

    1. @Test
    2. public void testSendDirectExchange() {
    3. // 交换机名称
    4. String exchangeName = "direct";
    5. // 消息
    6. String red = "hello, red!";
    7. rabbitTemplate.convertAndSend(exchangeName, "red", red);
    8. }

    运行结果 :
    ​​​​​​​解析 : 

     我们能看出, 这次由两个队列同时接收到了消息, 在队列direct.queue1和direct.queue2中, QueueBinding中声明的key同时都包含了 "red"

     源码项目地址:

    链接: https://pan.baidu.com/s/1vnYVEPGO8B5XLCf9Xc67cA 提取码: few9

     

  • 相关阅读:
    AAC音视频编码详解
    EGR-20USCM接地故障继电器
    JAVA中如何精确取到时间间隔
    弘辽科技:新手开店入门技巧有哪些?怎么做?
    Istio Ambient Mesh 介绍
    SystemVerilog——面向对象编程
    awtk-ftpd 发布
    SpringBoot整合WebSocket实战演练——Java入职十三天
    【Axure教程】通讯录搜索案例(字母定位+模糊搜索)
    单链表的介绍和内存布局 [数据结构][Java]
  • 原文地址:https://blog.csdn.net/qq_45481709/article/details/126003407