温馨提示:
以下需要控制台声明队列跟交换机的操作也可用代码实现,具体实现方式见以下文章:
RabbitMQ----代码声明队列及交换机(注解方式)-CSDN博客
交换机类型
真正生产环境都会经过exchange来发送消息,而不是直接发送到队列,交换机的类型有以下三种:
- Fanout:广播
- Direct:定向
- Topic: 话题
一、Fanout(广播)交换机
Fanout Exchange 会将接收到的消息广播到每一个跟其绑定的queue,所以也叫广播模式
利用SpringAMQP演示FanoutExchange的使用
实现思路如下:- 在RabbitMQ控制台中,声明队列fanout.queue1和fanout.queue2
- 在RabbitMQ控制台中,声明交换机hmall.fanout,将两个队列与其绑定
- 在consumer服务中,编写两个消费者方法,分别监听fanout.queue1和fanout.queue2
- 在publisher中编写测试方法,向hmall.fanout发送消息
1、控制台声明队列
2、控制台声明交换机
2.1、声明交换机
2.2、绑定队列
3、编写模拟消费者
@RabbitListener(queues = "fanout.queue1") //监听的队列:fanout.queue1 public void listenFanoutQueue1(String msg) throws InterruptedException { System.out.println("消费者1 收到消息:【"+msg+"】"); } @RabbitListener(queues = "fanout.queue2") //监听的队列:fanout.queue2 public void listenFanoutQueue2(String msg) throws InterruptedException { System.out.println("消费者2 收到消息:【"+msg+"】"); }
4、编写模拟发送者
@Test void testSendFanout(){ String exchangeName = "hmall.fanout"; String msg = "hello, fanout everyone"; rabbitTemplate.convertAndSend(exchangeName,null,msg); }
注意:此处的bingingKey为null,表示以广播的形式把消息发送到每个与之关联的队列上
5、结果显示
二、Direct(定向)交换机
Direct Exchange 会将接收到的消息根据规则路由到指定的Queue,因此称为定向路由
- 每一个Queue都与Exchange设置一个BindingKey
- 发布者发送消息时,指定消息的RoutingKey
- Exchange将消息路由到BindingKey与消息RoutingKey一致的队列
利用SpringAMQP演示DirectExchange的使用
需求如下:- 在RabbitMO控制台中,声明队列direct.queue1和direct.queue2
- 在RabbitMQ控制台中,声明交换机hmall.direct,将两个队列与其绑定
- 在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2
- 在publisher中编写测试方法,利用不同的RoutingKey向hmall.direct发送消息
1、控制台声明队列
2、控制台声明交换机
2.1、声明交换机
2.2、绑定队列并定义key
3、编写模拟消息消费者
@RabbitListener(queues = "direct.queue1") //监听的队列:direct.queue1 public void listenDirectQueue1(String msg) throws InterruptedException { System.out.println("消费者1 收到消息:【"+msg+"】"); } @RabbitListener(queues = "direct.queue2") //监听的队列:direct.queue2 public void listenDirectQueue2(String msg) throws InterruptedException { System.out.println("消费者2 收到消息:【"+msg+"】"); }
4、编写模拟消息发送者
@Test void testSendDirect(){ String exchangeName = "hmall.direct"; String msg = "hello, direct 绿色警报"; rabbitTemplate.convertAndSend(exchangeName,"red",msg); //两个队列都能收到该消息 rabbitTemplate.convertAndSend(exchangeName,"blue",msg); //只有direct.queue1队列能收到该消息 rabbitTemplate.convertAndSend(exchangeName,"yellow",msg); //只有direct.queue2队列能收到该消息 }
5、结果显示
三、 Topic(主题)交换机
TopicExchange与DirectExchange类似,区别在于routingKey可以是多个单词的列表,并且以 . 分割。
Queue与Exchange指定BindingKey时可以使用通配符:
# :代指0个或多个单词
* :代指一个单词案例:利用SpringAMQP演示DirectExchange的使用
需求如下:- 在RabbitMQ控制台中,声明队列topic.queue1和topic.queue2
- 在RabbitMQ控制台中,声明交换机hmall.topic ,将两个队列与其绑定
- 在consumer服务中,编写两个消费者方法,分别监听topic.queue1和topic.queue2
- 在publisher中编写测试方法,利用不同的RoutingKey向hmall.topic发送消息
1、控制台声明队列
2、控制台声明交换机
2.1、声明交换机
2.2、绑定交换机并配置key
3、编写模拟消息消费者
@RabbitListener(queues = "topic.queue1") //监听的队列:topic.queue1 public void listenTopicQueue1(String msg) { System.out.println("消费者1 收到消息:【"+msg+"】"); } @RabbitListener(queues = "topic.queue2") //监听的队列:topic.queue2 public void listenTopicQueue2(String msg) { System.out.println("消费者2 收到消息:【"+msg+"】"); }
4、编写模拟消息发送者
@Test void testSendTopic(){ String exchangeName = "hmall.topic"; String msg = "hello, topic 日本的新闻"; rabbitTemplate.convertAndSend(exchangeName,"china.news",msg); //两个队列都能收到该消息 rabbitTemplate.convertAndSend(exchangeName,"china.weather",msg); //topic.queue1队列能收到该消息 rabbitTemplate.convertAndSend(exchangeName,"japan.news",msg); //topic.queue2队列能收到该消息 }
5、结果显示
Direct交换机与Topic交换机的差异!
- Topic交换机接收的消息RoutingKey可以是多个单词,以 . 分割
- Topic交换机与队列绑定时的bindingKey可以指定通配符
- # : 代表0个或多个词
- * : 代表1个词
猜你喜欢
- 14天前(万达酒店及度假村连续五年荣获“中国饭店集团60强”)万达酒店及度假村连续五年荣获“中国饭店集团60强”
- 14天前(安徽民航君澜大饭店装饰设计招标)集东方文化气息,品徽派隽美风韵----安徽民航君澜大饭店静待绽放
- 14天前(兵团猛进秦剧团持续开展“戏曲进校园”活动)兵团猛进秦剧团持续开展“戏曲进校园”活动
- 14天前(罗马尼亚的匈牙利族自治)江苏赴匈牙利、罗马尼亚开展文旅交流推广活动
- 14天前(当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者")当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者"
- 14天前(中国旅游集团旗下酒店)中国旅游集团酒店控股有限公司战略投资雅阁酒店集团
- 14天前(万豪旅享家活动2021)精彩上新,漫享夏日----跟随万豪旅享家新开酒店解锁夏日旅行灵感
- 14天前(阿斯塔纳航空属于哪个联盟)阿斯塔纳航空荣获Skytrax世界航空公司大奖,将继续助力中哈交流往来
- 14天前(北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- 14天前(海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章