1:首先呢,为什么要使用交换机?

我个人得想法是:当发布者将消息直接放入队列中以后,一旦消费者对此消息使用,则消息将会从队列中删除,导致其他消费者拿不到队列中得消息。

可以看到,在订阅模型中,多了一个exchange角色,而且过程略有变化:

  • Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给交换机

  • Exchange:交换机。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有以下3种类型:

    • Fanout:广播,将消息交给所有绑定到交换机的队列

    • Direct:定向,把消息交给符合指定routing key 的队列

    • Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列

  • Consumer:消费者,与以前一样,订阅队列,没有变化

  • Queue:消息队列也与以前一样,接收消息、缓存消息

2:简单得代码实现 

(1):在生产 者中得代码与之前略有不同,要将消息发布到交换机

在代码中交换机得名称为“xiaoze.fanout”,消息为:'hello,everyone'.

 //交换机测试@Testpublic void testFanoutExchange() {// 队列名称String exchangeName = "xiaoze.fanout";// 消息String message = "hello, everyone!";rabbitTemplate.convertAndSend(exchangeName, "", message);}

(2):在消费者中配置交换机以及将交换机与队列进行绑定。

一:config中配置交换机。

@Configuration
public class FanoutConfig {/*** 声明交换机* @return Fanout类型交换机*/@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("xiaoze.fanout");}/*** 第1个队列*/@Beanpublic Queue fanoutQueue1(){return new Queue("fanout.queue1");}/*** 绑定队列1和交换机* @return*/@Beanpublic Binding bindingQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);}/*** 第2个队列*/@Beanpublic Queue fanoutQueue2(){return new Queue("fanout.queue2");}/*** 绑定队列2和交换机*/@Beanpublic Binding bindingQueue2(Queue fanoutQueue2, FanoutExchange fanoutExchange){return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);}
}

二:在监听器中对两个队列进行监听。

@Component
public class SpringRabbitListener {//使用交换机进行监听@RabbitListener(queues = "fanout.queue1")public void listenFanoutQueue1(String msg) {System.out.println("消费者1接收到Fanout消息:【" + msg + "】");}@RabbitListener(queues = "fanout.queue2")public void listenFanoutQueue2(String msg) {System.out.println("消费者2接收到Fanout消息:【" + msg + "】");}}

(3):结果图。运行消费者服务,让他时刻处于监听状态,然后在生产者测试中运行测试,进行消息发布。

FanoutExchange交换机简单使用相关推荐

  1. 路由器和交换机简单总结(cisco设备)

    路由器和交换机简单总结(cisco设备)

  2. 华三s5000配置镜像接口_H3C S5000交换机简单配置

    H3C S5000 交换机简单配置 常用命令 ------- 此状态下为用户模式, 只能查看交换机的配置, 不能进行具体配置 system view ---------- 由用户模式进入配置模式,可简 ...

  3. 华三S1824G、S1850V2-28P二层交换机简单配置步骤

    交换机Vlan中 tagged和untagged的区别(引用知乎问答): 先说VLAN,一个VLAN就是一个广播域.一个设备连接到一个VLAN,如果这个设备往这个VLAN里发送帧,交换机会把这个帧群发 ...

  4. 交换机简单配置 SSH

    配置 SSH 拓扑图如下: 1.是否快速配置,这里选择否,输入n 2.进入特权模型查看是否支持ssh加密模式 3.进入全局配置模式,设置域名 4.设置交换机名称和特权密码 5.开启ssh和生成rsa密 ...

  5. aruba 交换机 简单维护

    一.操作权限级别 ">" 运维模式 "#" 管理模式 "(config)#" 配置模式 二.模式进入 enable 进入管理模式(从' ...

  6. 锐捷交换机简单配置SNMP

    要求:配置交换机的SNMP消息报告机制,向主机192.168.1.2发送Trap,消息版本采用V2C,读写的Community为"admin",只读的Community为" ...

  7. 锐捷(五)交换机简单网络管理协议(SNMP)的配置

    要求: 在交换机上部署SNMP功能. 1.向主机 172.16.0.254 发送 Trap 消息,版本采用V2C. 2.读写的Community为"admin".只读的Commun ...

  8. RabbitMQ之消息模式简单易懂,超详细分享

    前言 上一篇对RabbitMQ的流程和相关的理论进行初步的概述,如果小伙伴之前对消息队列不是很了解,那么在看理论时会有些困惑,这里以消息模式为切入点,结合理论细节和代码实践的方式一起来学习. 正文 常 ...

  9. RabbitMQ 服务异步通信 -- 入门案例(消息预存机制)、SpringAMQP、发布订阅模式(FanoutExchange、DirectExchange、TopicExchange)、消息转换器

    文章目录 1. 入门案例 2. 完成官方Demo中的hello world案例 2.1 创建1个工程,2个模块 2.1.1 父工程的依赖,子工程不需要导入额外的依赖 2.1.2 配置子工程的配置文件( ...

最新文章

  1. 003_Controller和RequestMapping注解
  2. opengl加载显示3D模型HMP类型文件
  3. MFC添加自定义消息
  4. Facebook 如何管理150亿张照片
  5. ProtoBuf 常用序列化/反序列化API
  6. S3C2440对Nand Flash操作和电路原理(基于K9F2G08U0A)
  7. web测试内容及工具经典总结
  8. 由一维数组创建小根堆
  9. 大数据平台有什么功能作用
  10. 李宏毅自然语言处理——成分句法分析
  11. 程序性能之显示大表格
  12. C#等 句柄是什么?
  13. mysql 导出表数据
  14. 火星坐标系和百度坐标系的经纬度相互转换
  15. 2021机器学习面试必考面试题汇总(附答案详解)
  16. js导出WORD设置分页
  17. 关于node-pyg的路径问题导致build失败
  18. 无线ap安全dhcp服务器,AC+AP时代——办公区内满足安全性又够人性化的WiFi漫游设置攻略...
  19. 【C++】二分法查找某个数字在数组中的下标
  20. Node+Vue实现高校公寓管理系统设计与开发

热门文章

  1. Android lmkd 机制从R到T
  2. WebConfig中常用的connectionStrings配置
  3. 戴德金--连续性和无理数--我自己做的中文翻译第3页
  4. c# oracle存储过程返回结果集,一个简单的实例给大家分享C#中调用oracle的存储过程...
  5. 如何让计算机显示手机u盘启动,如何设置u盘启动
  6. ABAP SAP 千分位 处理
  7. PHP网站漏洞的相关总结(转)
  8. php 拆分url目录,PHP 解析URL和URL参数拆分与合并
  9. 用计算机语言完成游戏的计算,以计算思维为导向的编程教育游戏的设计
  10. [LINUX] tmux与vim速查手册