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.编写消费者方法

package cn.itcast.mq.lintener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MQListener {

    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueue1(String message)  {
        log.info("消费者1收到了消息:........... {}", message);
//        System.out.println("消费者收到了消息: " + message);
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueue2(String message)  {
        log.info("消费者2收到了消息: {}", message);
//        System.out.println("消费者收到了消息: " + message);
    }
}

3.编写生产者测试方法

package cn.itcast.mq.helloworld;

import org.apache.logging.log4j.message.Message;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.messaging.converter.StringMessageConverter;

@SpringBootTest
public class SpringAMQPTest {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    //  direct交换机
    @Test
    void testDirectExchange(){
        String exchangeName = "hmall.direct";
        String message1 = "hello, red 1111";
        String message2 = "bule ddddd";
        String message3 = "yello ttttt";
        rabbitTemplate.convertAndSend(exchangeName,"red",message1);
        rabbitTemplate.convertAndSend(exchangeName,"bule",message2);
        rabbitTemplate.convertAndSend(exchangeName,"yellow",message3);

    }
}

实验结果

消费者12 都能收到red

消费者1收到bule

消费者2收到yellow

实现成功

相关推荐

  1. RabbitMq——direct交换器和fanout交换器 扇形交换器

    2024-03-13 22:50:03       41 阅读
  2. RabbitMQ02-RebbitMQ简介及交换器

    2024-03-13 22:50:03       25 阅读
  3. RabbitMQ交换机

    2024-03-13 22:50:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 22:50:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 22:50:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 22:50:03       82 阅读
  4. Python语言-面向对象

    2024-03-13 22:50:03       91 阅读

热门阅读

  1. SQL 中 IN 与 <= 且 >= 的效率比较

    2024-03-13 22:50:03       47 阅读
  2. 职业规划随笔

    2024-03-13 22:50:03       45 阅读
  3. k8s之配置springboot项目

    2024-03-13 22:50:03       42 阅读
  4. go优雅重试

    2024-03-13 22:50:03       45 阅读
  5. vue从零到一创建项目?

    2024-03-13 22:50:03       50 阅读
  6. python 基础练习题

    2024-03-13 22:50:03       30 阅读
  7. ElasticSearch 搜索推荐

    2024-03-13 22:50:03       44 阅读
  8. ES6 类的扩展

    2024-03-13 22:50:03       42 阅读
  9. js的事件有哪些?

    2024-03-13 22:50:03       41 阅读