• RabbitMQ - 05 - Direct交换机


    部署demo项目

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

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

    什么是Direct交换机

            Direct 交换机是 AMQP(高级消息队列协议)中的一种交换机类型,它根据消息的路由键(Routing Key)将消息发送到与之完全匹配的队列上。只有绑定到 Direct 交换机时指定了相同路由键的队列才会接收到消息。

            在使用 Direct 交换机时,生产者将消息发送到 Direct 交换机,并指定一个特定的路由键。Direct 交换机会根据消息的路由键将消息发送到与之完全匹配的队列上。如果多个队列的路由键与消息的路由键完全匹配,则消息会被发送到多个队列中。

            Direct 交换机常用于需要一对一通信的场景,例如任务分发、日志分类等。通过合理设置路由键,可以将消息准确地发送到目标队列,实现灵活的消息路由和处理。

    Direct 交换机的特点包括:

    1. 精确路由Direct 交换机根据消息的路由键进行精确匹配,只将消息发送到与之完全匹配的队列上。
    2. 灵活性:生产者可以通过设置消息的路由键来控制消息被发送到哪个队列。
    3. 一对一通信:每个消息只能被一个消费者接收。

    实现Direct交换机

    1.控制台

    创建两个消息队列

    创建direct交换机

    绑定消息队列
    如图 绑定的同时设置Routing key

    queue1 queue2都有red,则等下 生产者发送Routing key = red 的消息时,两个队列都会收到这个消息

    相反 bule,yellow都是各自独有的,则等下 发送时之后有一个消息队列能够接收到

    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 = "direct.queue1")
    9. public void listenDirectQueue1(String message) {
    10. log.info("消费者1收到了消息:........... {}", message);
    11. // System.out.println("消费者收到了消息: " + message);
    12. }
    13. @RabbitListener(queues = "direct.queue2")
    14. public void listenDirectQueue2(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. // direct交换机
    13. @Test
    14. void testDirectExchange(){
    15. String exchangeName = "hmall.direct";
    16. String message1 = "hello, red 1111";
    17. String message2 = "bule ddddd";
    18. String message3 = "yello ttttt";
    19. rabbitTemplate.convertAndSend(exchangeName,"red",message1);
    20. rabbitTemplate.convertAndSend(exchangeName,"bule",message2);
    21. rabbitTemplate.convertAndSend(exchangeName,"yellow",message3);
    22. }
    23. }

    实验结果

    消费者12 都能收到red

    消费者1收到bule

    消费者2收到yellow

    实现成功

  • 相关阅读:
    hive数据质量规范
    torch.optim.Adam
    【EMR】HBase替换现有底层存储hdfs为oss
    hive的数据类型和表类型
    React Hooks、useState、useEffect 、react函数状态
    GaussDB数据库SQL系列-数据去重
    【MATLAB第71期】基于MATLAB的Abcboost自适应决策树多输入单输出回归预测及多分类预测模型(更新中)
    IP地址技术原理
    巧用 CSS 构建渐变彩色二维码
    uni-combox实现是否禁止输入及点击需要两次才会展示搜索内容:
  • 原文地址:https://blog.csdn.net/weixin_60257917/article/details/136602084