当前位置: 首页 > news >正文

RabbitMQ的交换机(原理及代码实现)

1.交换机类型

  • Fanout Exchange(扇形)
  • Direct Exchange(直连)
  • opic Exchange(主题)
  • Headers Exchange(头部)

2.Fanout Exchange

2.1 简介

Fanout 扇形的,散开的; 扇形交换机

投递到所有绑定的队列,不需要路由键,不需要进行路由键的匹配,相当于广播、群发;
如下图所示
在这里插入图片描述
P代表provider提供者,X代表exchange交换机,第三部分代表队列

2.2 代码示例

2.2.1 扇形交换机与队列

定义交换机主要由3部分组成,

  • 1.定义交换机
  • 2.定义队列
  • 3.绑定交换机
@Configuration
public class RabbitConfig {//rabbitmq三部曲//1.定义交换机@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("exchange.fanout");}//2.定义队列//此处定义两个队列@Beanpublic Queue queueA(){return new Queue("queue.fanout.a");}@Beanpublic Queue queueB(){return new Queue("queue.fanout.b");}//3.绑定交换机@Beanpublic Binding bindingA(FanoutExchange fanoutExchange,Queue queueA){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueA).to(fanoutExchange);}@Beanpublic Binding bindingB(FanoutExchange fanoutExchange,Queue queueB){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueB).to(fanoutExchange);}
}

2.2.2 模拟provider发送消息

发送消息模拟

@Component
@Slf4j
public class MessageService {@Resourceprivate RabbitTemplate rabbitTemplate;public void senMsg(){//定义消息String msg="hello world";//发消息Message message= new Message(msg.getBytes());rabbitTemplate.convertAndSend("exchange.fanout","",message);log.info("消息发送完毕,发送时间为:{}", new Date());}
}

2.2.3 接受扇形交换机信息

3.Direct Exchange

根据路由路由键(Routing Key)精确匹配(一模一样)进行路由消息队列;
与扇形交换机不同的是,直连交换机必须要绑定key
在这里插入图片描述

3.2代码示例

@Configuration
public class RabbitConfig {//rabbitmq三部曲//1.定义交换机@Beanpublic DirectExchange directExchange(){return ExchangeBuilder.directExchange("exchange.direct").build();}//2.定义队列//此处定义两个队列@Beanpublic Queue queueA(){return new Queue("queue.direct.a");}@Beanpublic Queue queueB(){return new Queue("queue.direct.b");}//3.绑定交换机@Beanpublic Binding bindingA(DirectExchange directExchange,Queue queueA){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueA).to(directExchange).with("error");}@Beanpublic Binding bindingB1(DirectExchange directExchange,Queue queueB){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueB).to(directExchange).with("error");}@Beanpublic Binding bindingB2(DirectExchange directExchange,Queue queueB){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueB).to(directExchange).with("info");}@Beanpublic Binding bindingB3(DirectExchange directExchange,Queue queueB){//将队列A绑定到扇形交换机return BindingBuilder.bind(queueB).to(directExchange).with("warning");}
}

4. Topic Exchange

通配符匹配,相当于模糊匹配;

#匹配多个单词,用来表示任意数量(零个或多个)单词
*匹配一个单词(必须有一个,而且只有一个),用.隔开的为一个单词

5.Headers Exchange

基于消息内容中的headers属性进行匹配;

用的比较少

相关文章:

  • WPF:自定义按钮模板
  • python基础语法(十一)
  • 研发效能认证学员作品:快速进行持续集成应用实践丨IDCF
  • 使用pycharm远程连接到Linux服务器进行开发
  • ES6中数值扩展
  • 论文-分布式-并发控制-并发控制问题的解决方案
  • 【面试经典150 | 栈】最小栈
  • 2023辽宁省赛E
  • 【QT】其他常用控件1
  • 【网络协议】聊聊UDP协议
  • 从InnoDB索引的数据结构,去理解索引
  • 调试记录 单片机GD32F103C8T6(兆易创新) 程序烧写完成但是没有现象 (自己做的板子)
  • Netty优化-rpc
  • idea 提升效率的常用快捷键 汇总
  • Kafka KRaft模式探索
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 78. Subsets
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Angular2开发踩坑系列-生产环境编译
  • conda常用的命令
  • Fastjson的基本使用方法大全
  • Java深入 - 深入理解Java集合
  • js ES6 求数组的交集,并集,还有差集
  • Mysql数据库的条件查询语句
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 如何设计一个微型分布式架构?
  • 什么是Javascript函数节流?
  • 实现菜单下拉伸展折叠效果demo
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 优秀架构师必须掌握的架构思维
  • 正则学习笔记
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (差分)胡桃爱原石
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (转)Google的Objective-C编码规范
  • .NET CLR Hosting 简介
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Reactor简单使用教程
  • .NET6 命令行启动及发布单个Exe文件
  • .NET委托:一个关于C#的睡前故事
  • .Net下的签名与混淆
  • //解决validator验证插件多个name相同只验证第一的问题
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [@Controller]4 详解@ModelAttribute
  • [BZOJ 2142]礼物(扩展Lucas定理)
  • [BZOJ 3531][Sdoi2014]旅行(树链剖分+线段树)
  • [git] windows系统安装git教程和配置
  • [json]定义、读写
  • [leetcode]Search a 2D Matrix @ Python
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务
  • [LitCTF 2023]Http pro max plus