43:RabbitMQ四大类型的交换机持久化
目录
- 环境配置
- 同步架构
- 分布式异步队列
- 队列(异步队列/异步架构)解读
- 常见异步队列组件
- C#驱动RabbitMQ
- 单生产者单消费者
- 多生产者多消费者
- 互为生产消费者
- RabbitMQ Exchange(交换机)
- Direct Exchange应用
- Fanout Exchange
- Topic Exchange
- Header Exchange
- 消息持久化
- 发布订阅
- RabbitMQ生产端消息确认
- RabbitMQ消费端消息确认
- 系统架构
- Redis与RabbitMQ区别
环境配置
环境配置地址:访问:https://blog.csdn.net/hello_mr_anan/article/details/118854353
同步架构
- 同步:客户端发起请求,服务器响应,服务器在相应的过程中,如果需要去调用其他服务,因为是同步,所以需要等待其他的服务执行完成,然后再响应给客户端;
- 好处:可以及时得到结果,同步完成;
分布式异步队列
- 异步架构:
客户端发起请求,服务器监听到请求后,把请求需要做的事儿,可能序列化,保存到一个中间项中去,保存进入以后,马上响应给客户端: - 要做的事儿,已经在给你准备做了,做到什么什么程度不知道; 事儿由谁来做呢?
- 由Processor来做具体的事情,可能去调用其他服务也有可能去做数据库的操作;
队列(异步队列/异步架构)解读
- 好处:
- 响应快,服务端请求来了以后,写入到broker中,就马上响应给客户端;
- 扩展性好一些:每一个处理模块可以独立的演化升级
- 高可用:如果处理业务需求的服务宕机了,挂了,现在仍然不影响客户的使用
- 缺陷:
- 好复杂:多了一层,就需要维护一层;
- 更加依赖于Broker,后续RabbitMQ做Broker,可以集群
- 用户体验降低了;无法及时的获取到结果;—还不好解决
常见异步队列组件
- Kafka
- RabbitMQ
- Redis
C#驱动RabbitMQ
- nuget引入程序集:RabbitMQ.Client
- 创建链接
- 创建一个信道;
- 可以基于信道来创建队列,创建交换机
- 可以通过交换机发送消息
单生产者单消费者
- 一个生产者一个消费者;
- 消息只是被消费一次;
- Factory—channel介绍
- 队列:先进先出;就跟一个水管一样,一边进入,另外一边出来
多生产者多消费者
一个生产者一个消费者;消息只是被消费一次;
互为生产消费者
一个生产者一个消费者;消息只是被消费一次;
RabbitMQ Exchange(交换机)
- Direct Exchange
- Fanout Exchange
- Topic Exchange
- Header Exchange
- 交换机:Exchange; 家庭中的交换机,路由器:
- 作用;转发网络信息到不同的终端设备,手机,电视,电脑;
- 在RabbitMQ中,发消息给RabbitMQ,其实并不是直接把消息发送给队列,而是把
消息发送给交换机,然后由交换机来进行转发;
发送消息来说:有什么好处?
适配:可以把消息经过匹配后,转发到不同的队列中去中;交换机的存在就可以控制很多种规则;交换机存在的最大价值:可以让我们来了定义更多的规则;可以根据不同的业务场景定义不同的规则;
从程序设计角度来说:包一层大法;
Direct Exchange应用
- 在发送消息的时候,通过Direct类型的路由转发;
要求Direct类型交换机和队列绑定;绑定需要一个标识,生产者在发送消息的时候,也需要指定一个标识,消息发送给交换机以后,交换机进行标识的匹配;知道和交换机绑定队列完全吻合的标识,只要是匹配到了,就把息通过交换机转发给当前绑定标识吻合的这个队列中去;
Direct类型的交换机可以做点啥?
如果说有一个生产者发送了很多消息,需要把消息分类处理;
消息需要分几类,就可以定义几个队列;分别把队列和交换机在绑定的是偶,分别给出不同的表示,发送消息的时候,就给出不同标识,就可以把消息发送到不同的经过分类的队列中去了;记录日志:记录日志,分类的记录,如果是异常,就需要另外的处理;
还需要来一个所有日志的记录;
定义一个记录所有日志的队列,定义一个专门为异常日志存在的队列;
定义一个Dirct类型的交换机,分别绑定不同的标识,日志生产出来以后,就可以根据日志的类型不同,发给路由,把类型作为标识,路由匹配后,就可以转发到不同的队列中去中,就可以把日志分类处理;
日志的分批处理
Fanout Exchange
fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchange的消息路由到所有与它绑定的Queue中。
交换机和队列绑定不需要指定标识;对于生产者发过来的消息,发给交换机以后,只要是整个交换机和队列有绑定,交换机就转发给队列;
生产者发送的消息都可以转发给和他绑定额队列;
广播式;发布订阅模式;一个生产者把消息发送过去,多个消费者都可以接受到了;
Topic Exchange
- Topic交换机:可以做到模糊匹配;
- Exchange绑定队列需要制定标识 标识 可以有自己的规则;标识可以有占位符、通配符;*或# *匹配一个单词、#匹配多个单词,在Direct基础上加上模糊匹配;
模糊匹配:
Header Exchange
规则:headers类型的Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。在绑定Queue与Exchange时指定一组键值对以及x-match参数,x-match数是字符串类型,可以设置为any或者all。如果设置为any,意思就是只要匹配到了headers表中的任何一对键值即可,all则代表需要全部匹配。
通过头信息,做到了消息发送到队列中的是偶,做到了或者和且的应用;
消息持久化
- 如果在队列中写入了非常多的消息: 因为停电了,RabbitMQ服务器肯定挂了;这些消息怎么办呢? 消息丢失了;
- 服务宕机服务重启;消息会丢失,如果有消息堆积,服务器故障了,消息的丢失其实就是业务处理不完整;
- 最好能够做到消息持计化;
- 如何做消息的持久化呢?
- rabbitMQ是可以支持消息的持久化的,服务器如果宕机,重启,消息可以固化到硬盘的;
- 三步走:
- 声明队列必须声明为支持消息持久化的队列
- 声明交换机必须声明为支持消息持久化的交换机
- 发送消息的时候,必须支持为可持久化的消息;
发布订阅
RabbitMQ生产端消息确认
Tx事务模式
- 从AMQP协议层面上来的事务模式;
- channel.TxSelect(); 开启一个事务
- channel.TxCommit();提交事务
- channel.TxRollback(); //事务回滚
Confirm模式
- channel.ConfirmSelect();开启确认模式
- 消息发送以后,提供一个回执方法WaitForConfirms(); 返回一个bool 值;
- 单条消息确认: channel.waitForConfirms()
- 批量消息确认: channel.waitForConfirmsOrDie()批量确认模式
- 异步监听消息确认:channel.addConfirmListener()
RabbitMQ消费端消息确认
- 自动确认
- 显示确认
系统架构
集群架构
分布式架构
集群:还是多台服务器,每一台服务器都可以完成整个业务流程;
一个业务流程:分为十个步骤;
有多台服务器;每台服务器负责其中几个步骤;串联起来==分布式架构;
Redis与RabbitMQ区别
- Redis做适合做缓存,因为redis的消息队列不是强项
- RabbitMQ适合做消息队列
43:RabbitMQ四大类型的交换机持久化相关推荐
- RabbitMq(二)一文彻底弄懂RabbitMq的四种交换机原理及springboot实战应用
四大交换机工作原理及实战应用 交换机概念 direct 直连交换机 工作模式图解 springboot代码 Fanout扇出交换机 工作模式图解 springboot代码 Topic主题交换机 工作模 ...
- RabbitMQ的四种交换机模式
一.RabbitMQ的简单介绍 RabbitMQ作为一个消息队列,它负责提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全可靠. 消息(Message)由Client(客户端)发送,Ra ...
- 无线营销新蓝海----解析H5应用场景的四大类型
2019独角兽企业重金招聘Python工程师标准>>> 阿里百川(baichuan.taobao.com)的许多合作商家或无线开发者常常有这样的困惑:脑海中有无数个h5页面的 big ...
- java direct memory_第一讲 JVM内存四大类型:Heap,Stack,Contant,DirectMemory等
第一讲JVM内存四大类型:Heap,Stack,Contant,DirectMemory等 Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的 ...
- 四大类型的BPM平台
很多人认为业务流程管理(BPM)是"工作流的深化".于是,常常有人将工作流与BPM混淆,也有不少人采用工作流技术来定义BPM终端.现在,许多研究人员和从业者开始意识到,BPM的定义 ...
- ubuntu使用docker-compose安装rabbitmq并实现延迟交换机
ubuntu使用docker-compose安装rabbitmq并实现延迟交换机 安装rabbitmq 前置条件是安装了docker跟docker-compose 创建docker-compose.y ...
- C++核心准则C.43:保证(值类型)可拷贝类有默认构造函数
C.43: Ensure that a copyable (value type) class has a default constructor C.43:确保(值类型)可拷贝类有默认构造函数 Re ...
- rabbitmq队列模式以及交换机模式
常用命令 ## rabbitmq 常用命令 进入到sbin目录 启用管理插件:rabbitmq-plugins enable rabbitmq_management 启动服务: net start R ...
- RabbitMQ(四)交换机exchange
5.1 exchanges 5.1.1 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中. 相反, ...
- 四大开源分布式存储_Kubernetes持久化存储方案测试
在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...
最新文章
- mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8
- 这可能是把策略模式讲的最通俗易懂得文章了!
- FSBL UBOOT KERNELROOTFS 启动流程详解 (未完待续)
- 奠定了整个计算机科学的基础是什么,冯 诺依曼对计算机科学发展所作的贡献是什么...
- h5+js视频播放器控件
- python 计算协方差_python 线性代数:[12]求协方差矩阵
- php 匹配双字节字符串,收集一些常用的正则表达式(匹配中文字符、匹配双字节字符、匹配HTML标记、匹配空行 and so on~~~)...
- Resource Hacker+mysql安装会出现错误“应用程序无法启动因为应用程序的并行配置不正确”...
- 针对ArcGIS Server 跨域问题的解释
- mybatisplus多表关联查询_Excel、MySQL、PowerBI、Python来告诉你 数据关联与联合不一样
- 【报告分享】2021年双11电商营销全景洞察.pdf(附下载链接)
- 算法四:回溯和分支界定
- Yii2的redis扩展
- 解决office 2019打开word、excel慢的问题
- mipi传输距离3米_弱电网络工程中网线大于100米怎么办?离300米远用什么线缆较好?...
- 科林明伦杯 哈尔滨理工大学第十届程序设计竞赛 (补)
- 下取整函数的含义_向上取整⌈⌉和向下取整⌊⌋符号含义及应用
- PDR步行者航位推算
- js获取当前时间的年月日时分秒以及时间的格式化
- 2019/01/07 一位前端实习生 艰辛过程 励志 实习周记(三)——第二 三周
热门文章
- Configuration Specification-Handling Unit Management
- 三十而立,80后挺立?卧倒,还是爬行?
- Java使用httpClient发送请求与数据的解析(有案例)
- Python数据处理pdf (中文版带书签)、原书代码、数据集
- 小坑记录!安卓调用前置摄像头的时候报错(Suggested resolution map missing resolution for camera1) 解决方法记录
- Spring Boot指南-第一部分
- ae如何去除视频水印?分享三个简单的方法!
- 【2017中国开发者调查报告】2017,人工智能技术如何让中国开发者“倾心”又“上火”...
- Python安装常用地图包:GDAL\Shaoely\Fiona
- 2017省组队训练 zoj 3385Hanami Party (贪心+栈优化)