通过消息队列demo项目进行练习 相关配置看此贴 http://t.csdnimg.cn/hPk2T
注意 生产者消费者的yml文件也要配置好
Direct 交换机是 AMQP(高级消息队列协议)中的一种交换机类型,它根据消息的路由键(Routing Key)将消息发送到与之完全匹配的队列上。只有绑定到 Direct 交换机时指定了相同路由键的队列才会接收到消息。
在使用 Direct 交换机时,生产者将消息发送到 Direct 交换机,并指定一个特定的路由键。Direct 交换机会根据消息的路由键将消息发送到与之完全匹配的队列上。如果多个队列的路由键与消息的路由键完全匹配,则消息会被发送到多个队列中。
Direct 交换机常用于需要一对一通信的场景,例如任务分发、日志分类等。通过合理设置路由键,可以将消息准确地发送到目标队列,实现灵活的消息路由和处理。
Direct 交换机的特点包括:
创建两个消息队列
创建direct交换机
绑定消息队列
如图 绑定的同时设置Routing key
queue1 queue2都有red,则等下 生产者发送Routing key = red 的消息时,两个队列都会收到这个消息
相反 bule,yellow都是各自独有的,则等下 发送时之后有一个消息队列能够接收到
- 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);
- }
- }
- 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
实现成功