• 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

     

  • 相关阅读:
    数据结构课程设计题目——链表综合算法设计、带头双向循环链表、插入、显示、删除、修改、排序
    网安学习-应急响应3
    小谈设计模式(2)—简单工厂模式
    LeetCode【42】接雨水
    Flutter高仿微信-第37篇-单聊-红包
    通过UDP实现参数配置
    浅谈顺序表基本操作
    [ruby on rails]rack-cors, rack-attack
    【K8S系列】深入解析k8s网络插件—Weave Net
    AI 绘画极简教程
  • 原文地址:https://blog.csdn.net/qq_45481709/article/details/126003407