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的知识,请关注本博主~~

相关推荐
anddddoooo35 分钟前
Kerberoasting 离线爆破攻击
网络·数据库·安全·microsoft·网络安全
T.O.P111 小时前
TCP 传输可靠性保障
网络·tcp/ip·php
缘友一世1 小时前
java实现网络IO高并发编程java AIO
java·网络·python
dog2502 小时前
TCP off-path exploits(又一个弄巧成拙的例子)
网络·网络协议·tcp/ip
hgdlip2 小时前
ip归属地是什么意思?ip归属地是实时定位吗
网络·tcp/ip·web安全
tjjingpan2 小时前
HCIA-Access V2.5_6_3_GPON组网保护
网络
云计算DevOps-韩老师2 小时前
【网络云计算】2024第52周-每日【2024/12/26】小测-理论&实操-备份MySQL数据库并发送邮件-解析
linux·开发语言·网络·数据库·mysql·云计算·perl
IT 古月方源2 小时前
ensp ppp 协议的讲解配置
运维·网络·网络协议·tcp/ip·智能路由器
员宇宙3 小时前
【RabbitMQ的死信队列】
分布式·rabbitmq·ruby
winks33 小时前
使用RabbitMQ
java·rabbitmq·java-rabbitmq