RabbitMQ5:Fanout交换机、Direct交换机、Topic交换机

欢迎来到"雪碧聊技术"CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在"雪碧聊技术"与您共同成长!

目录

一、Fanout交换机(广播转发)

1、什么是Fanout交换机?

2、案例

①案例介绍

②具体操作

③结论:fanout交换机,是广播的,即:与fanout交换机绑定的所有队列,都会收到交换机中的消息。

3、总结

二、Direct交换机(定向转发)

1、什么是Direct交换机?

2、如何确定Direct交换机给哪个队列转发消息?

举例

3、案例

①案例介绍

②具体操作

4、总结

5、注意:如果一个队列要绑定多个RoutingKey,需要绑定多次

举例:

三、Topic交换机(定向转发)

1、什么是Topic交换机?

2、Topic交换机和Direct交换机的区别

规则①:#代指任意个单词

规则②:*代指1个单词

3、案例

①案例介绍

②具体操作

4、总结

结语


一、Fanout交换机(广播转发)

1、什么是Fanout交换机?

Fanout 交换机(Exchange)会将接收到的消息广播到每一个跟其绑定的queue,所以也叫广播模式。

2、案例

①案例介绍

②具体操作

  • 第一步:在RabbitMQ控制台,创建两个队列fanout.queue1和fanout.queue2
  • 第二步:添加一台Fanout类型的交换机,名叫"hmall.fanout"
  • 第三步:给hmall.fanout交换机绑定刚才那两个队列
  • 第四步:编写代码,给hmall.fanout交换机发送一条消息
  • 第五步:编写监听代码,监听与hmall.fanout交换机绑定的两个队列
java 复制代码
@Component //交给spring管理
public class MqListener {
    @RabbitListener(queues = "fanout.queue1")
    public void listenFanoutQueue1(String msg) throws InterruptedException {//消费者1
        System.out.println("消费者1 收到了 fanout.queue1的消息... :【" + msg + "】");
    }

    @RabbitListener(queues = "fanout.queue2")
    public void listenFanoutQueue2(String msg) throws InterruptedException {//消费者2
        System.err.println("消费者2 收到了 fanout.queue2的消息... :【" + msg + "】");
    }
}
  • 第六步:运行项目,查看结果
java 复制代码
消费者1 收到了 fanout.queue1的消息... :【hello,everyone!】
消费者2 收到了 fanout.queue2的消息... :【hello,everyone!】

③结论:fanout交换机,是广播的,即:与fanout交换机绑定的所有队列,都会收到交换机中的消息。

3、总结

二、Direct交换机(定向转发)

1、什么是Direct交换机?

Direct交换机会根据一定规则,将收到的消息,转发给对应的队列。

2、如何确定Direct交换机给哪个队列转发消息?

①publisher(生产者)给Direct交换机发送消息的时候,会给该条消息添加一个RoutingKey。

②给Direct交换机绑定队列时,也要指定每个队列的RoutingKey。

这么一来,当Direct交换机收到publisher(生产者)的消息后,会读取该条消息的RoutingKey,找到拥有该RoutingKey的那个队列,并给该队列转发消息。

举例

3、案例

①案例介绍

②具体操作

  • 第一步:创建两个队列direct.queue1和direct.queue2
  • 第二步:创建一个Direct类型的交换机
  • 第三步:给hmall.direct交换机绑定那两个队列,并指定其RoutingKey

结果如下:

  • 第四步:编写代码,发送一条消息给hmall.direct交换机
  • 第五步:编写监听direct.queue1和direct.queue2两个队列的代码
java 复制代码
@Component //交给spring管理
public class MqListener {
    @RabbitListener(queues = "direct.queue1")
    public void listenDirectQueue1(String msg) throws InterruptedException {//消费者1
        System.out.println("消费者1 收到了 direct.queue1的消息... :【" + msg + "】");
    }

    @RabbitListener(queues = "direct.queue2")
    public void listenDirectQueue2(String msg) throws InterruptedException {//消费者2
        System.out.println("消费者2 收到了 direct.queue2的消息... :【" + msg + "】");
    }
}
  • 第六步:运行项目,查看结果
java 复制代码
消费者2 收到了 direct.queue2的消息... :【红色警报,由于日本排放核污水,惊险哥斯拉!】

可见,由于direct.queue2的RoutingKey是"red",因此能收到此条消息(因为此条消息的RoutingKey也是"red")。

4、总结

生产者给Direct类型的交换机发送消息时,要指定该消息的RoutingKey;

给Direct类型的交换机绑定队列时,也要指定队列的RoutingKey;

Direct类型的交换机在转发消息时,只转发给RoutingKey一致的队列。

5、注意:如果一个队列要绑定多个RoutingKey,需要绑定多次

举例:

这样一来,这两个队列绑定的交换机,会把RoutingKey为red的消息,转发给direct.queue1和direct.queue2;会把RoutingKey为blue的消息,转发给direct.queue1;会把RoutingKey为yellow的消息,转发给direct.queue2。

三、Topic交换机(定向转发)

1、什么是Topic交换机?

Topic交换机和Direct交换机一样,都是通过routingKey来指定交换机要将消息转发给哪个队列。

2、Topic交换机和Direct交换机的区别

Topic交换机在绑定队列时,routingKey可以是多个单词的列表,并以"."分割。

可以使用通配符来表示每个单词。

规则①:#代指任意个单词

规则②:*代指1个单词

举例:

3、案例

①案例介绍

②具体操作

  • 第一步:创建两个队列,topic.queue1和topic.queue2
  • 第二步:创建Topic类型的交换机,叫hmall.topic
  • 第三步:给hmall.topic交换机,绑定那两个队列,并指定每个队列的routingKey

  • 第四步:编写代码,向hmall.topic交换机中发送一条消息。
  • 第五步:编写两个消费者方法,分别监听topic.queue1和topic.queue2
java 复制代码
@Component //交给spring管理
public class MqListener {
    @RabbitListener(queues = "topic.queue1")
    public void listenTopicQueue1(String msg) throws InterruptedException {//消费者1
        System.err.println("消费者1 收到了 topic.queue1的消息... :【" + msg + "】");
    }

    @RabbitListener(queues = "topic.queue2")
    public void listenTopicQueue2(String msg) throws InterruptedException {//消费者2
        System.err.println("消费者2 收到了 topic.queue2的消息... :【" + msg + "】");
    }
}
  • 第六步:启动项目,测试结果
java 复制代码
消费者2 收到了 topic.queue2的消息... :【红色警报,由于日本排放核污水,惊险哥斯拉!】
  • 第七步:分析hmall.topic交换机转发消息的过程

4、总结

结语

以上就是RabbitMQ中的Fanout交换机、Direct交换机、Topic交换机的全部内容,想了解更多关于RabbitMQ的知识,请关注本博主~~

相关推荐
我命由我1234517 小时前
Android 开发 - 广播组件(标准广播、有序广播、静态注册广播、分钟到达广播、网络变更广播...)
android·java·开发语言·网络·java-ee·android studio·android-studio
MartinYeung517 小时前
[论文学习]WASP:面向提示注入攻击的Web代理安全性基准测试
前端·网络·学习
数字融合17 小时前
透明化时空联合无缝追踪,构筑无断点全域态势感知网络专项技术
网络·人工智能·virtualenv
cn分享汇17 小时前
2026免费空间大的网盘软件有哪些推荐,主流网盘拆解
大数据·网络·人工智能
Mr. zhihao17 小时前
Jenkins 从节点连不上主节点?一次网络排查全记录 + 机器间通信“拦截层“全景讲解
网络·servlet·jenkins
小罗水17 小时前
第9章 RabbitMQ 消息队列与索引任务
分布式·rabbitmq
数聚天成DeepSData17 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理
网络安全零基础教程18 小时前
零基础转行网安,前两个月具体该学什么工具
网络·学习·安全·web安全·网络安全
路由侠内网穿透.18 小时前
本地部署开源日志收集系统 Log Bull 并实现外部访问
运维·服务器·网络·数据库·开源
神仙别闹18 小时前
基于C++设计一个 P2P 聊天软件
网络·网络协议·p2p