rabbitmq基础-java-4、Direct交换机

1、简介

在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。

2、特点

在Direct模型下:

  • 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key)

  • 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey

  • Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息

3、设置队列

4、设置交换机

5、绑定队列

6、设置生产者

java 复制代码
    @Test
    void testSendDirect1() {
        String exchangeName = "test.direct";
        String msg = "红色通知";
        rabbitTemplate.convertAndSend(exchangeName, "red", msg);
    }

    @Test
    void testSendDirect2() {
        String exchangeName = "test.direct";
        String msg = "蓝色通知";
        rabbitTemplate.convertAndSend(exchangeName, "blue", msg);
    }

    @Test
    void testSendDirect3() {
        String exchangeName = "test.direct";
        String msg = "黄色通知";
        rabbitTemplate.convertAndSend(exchangeName, "yellow", msg);
    }

7、设置消费者

java 复制代码
    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueue1(String msg) {
        System.out.println("消费者1接收到direct.queue1的消息:【" + msg + "】");
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueue2(String msg) {
        System.out.println("消费者2接收到direct.queue2的消息:【" + msg + "】");
    }

8、测试

9、总结

Direct交换机与Fanout交换机的差异?

  • Fanout交换机将消息路由给每一个与之绑定的队列

  • Direct交换机根据RoutingKey判断路由给哪个队列

  • 如果多个队列具有相同的RoutingKey,则与Fanout功能类似

相关推荐
aLTttY几秒前
【Redis实战】分布式锁的N种实现方案对比与避坑指南
数据库·redis·分布式
小江的记录本10 小时前
【微服务与云原生架构】DevOps、CI/CD流水线、GitOps 系统性知识体系
分布式·后端·ci/cd·微服务·云原生·架构·devops
2603_9547083111 小时前
微电网混合控制架构:主从与对等控制的优势融合
分布式·安全·架构·能源·需求分析
zhangzeyuaaa12 小时前
Python多进程同步与共享内存完全指南:从Lock到分布式共享
开发语言·分布式·python
aini_lovee12 小时前
多智能体点对点转换的分布式模型预测控制(DMPC)
分布式
_F_y12 小时前
仿RabbitMQ实现消息队列-项目设计
分布式·rabbitmq
keep intensify15 小时前
MIT 6.824 lab3B/C
分布式·后端·golang
java1234_小锋15 小时前
RabbitMQ中有哪几种交换机类型?
分布式·rabbitmq
代码漫谈15 小时前
探索RabbitMQ集群:如何实现消息的高可用性和负载均衡
分布式·消息队列·rabbitmq·负载均衡
weisian1511 天前
Java并发编程--45-分布式一致性协议入门:Raft、Paxos与ZAB的核心思想
java·分布式·raft·paxos·zab