目录

  • 环境配置
  • 同步架构
  • 分布式异步队列
  • 队列(异步队列/异步架构)解读
  • 常见异步队列组件
  • 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来做具体的事情,可能去调用其他服务也有可能去做数据库的操作;

队列(异步队列/异步架构)解读

  • 好处:
  1. 响应快,服务端请求来了以后,写入到broker中,就马上响应给客户端;
  2. 扩展性好一些:每一个处理模块可以独立的演化升级
  3. 高可用:如果处理业务需求的服务宕机了,挂了,现在仍然不影响客户的使用
  • 缺陷:
  1. 好复杂:多了一层,就需要维护一层;
  2. 更加依赖于Broker,后续RabbitMQ做Broker,可以集群
  3. 用户体验降低了;无法及时的获取到结果;—还不好解决

常见异步队列组件

  1. Kafka
  2. RabbitMQ
  3. Redis

C#驱动RabbitMQ

  1. nuget引入程序集:RabbitMQ.Client
  2. 创建链接
  3. 创建一个信道;
  4. 可以基于信道来创建队列,创建交换机
  5. 可以通过交换机发送消息

单生产者单消费者

  • 一个生产者一个消费者;
  • 消息只是被消费一次;
  • Factory—channel介绍
  • 队列:先进先出;就跟一个水管一样,一边进入,另外一边出来

多生产者多消费者

一个生产者一个消费者;消息只是被消费一次;

互为生产消费者

一个生产者一个消费者;消息只是被消费一次;

RabbitMQ Exchange(交换机)

  1. Direct Exchange
  2. Fanout Exchange
  3. Topic Exchange
  4. 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是可以支持消息的持久化的,服务器如果宕机,重启,消息可以固化到硬盘的;
  • 三步走:
  1. 声明队列必须声明为支持消息持久化的队列
  2. 声明交换机必须声明为支持消息持久化的交换机
  3. 发送消息的时候,必须支持为可持久化的消息;

发布订阅

RabbitMQ生产端消息确认

  1. Tx事务模式

    • 从AMQP协议层面上来的事务模式;
    • channel.TxSelect(); 开启一个事务
    • channel.TxCommit();提交事务
    • channel.TxRollback(); //事务回滚
  2. Confirm模式

    • channel.ConfirmSelect();开启确认模式
    • 消息发送以后,提供一个回执方法WaitForConfirms(); 返回一个bool 值;

  1. 单条消息确认: channel.waitForConfirms()
  2. 批量消息确认: channel.waitForConfirmsOrDie()批量确认模式
  3. 异步监听消息确认:channel.addConfirmListener()

RabbitMQ消费端消息确认

  1. 自动确认
  2. 显示确认

系统架构

集群架构
分布式架构
集群:还是多台服务器,每一台服务器都可以完成整个业务流程;
一个业务流程:分为十个步骤;
有多台服务器;每台服务器负责其中几个步骤;串联起来==分布式架构;

Redis与RabbitMQ区别

  1. Redis做适合做缓存,因为redis的消息队列不是强项
  2. RabbitMQ适合做消息队列

43:RabbitMQ四大类型的交换机持久化相关推荐

  1. RabbitMq(二)一文彻底弄懂RabbitMq的四种交换机原理及springboot实战应用

    四大交换机工作原理及实战应用 交换机概念 direct 直连交换机 工作模式图解 springboot代码 Fanout扇出交换机 工作模式图解 springboot代码 Topic主题交换机 工作模 ...

  2. RabbitMQ的四种交换机模式

    一.RabbitMQ的简单介绍 RabbitMQ作为一个消息队列,它负责提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全可靠. 消息(Message)由Client(客户端)发送,Ra ...

  3. 无线营销新蓝海----解析H5应用场景的四大类型

    2019独角兽企业重金招聘Python工程师标准>>> 阿里百川(baichuan.taobao.com)的许多合作商家或无线开发者常常有这样的困惑:脑海中有无数个h5页面的 big ...

  4. java direct memory_第一讲  JVM内存四大类型:Heap,Stack,Contant,DirectMemory等

    第一讲JVM内存四大类型:Heap,Stack,Contant,DirectMemory等 Stack属于栈的区域,属于每条线程私有的. 方法区和本地方法栈有很大的不同,方法区是用Java级别角度做的 ...

  5. 四大类型的BPM平台

    很多人认为业务流程管理(BPM)是"工作流的深化".于是,常常有人将工作流与BPM混淆,也有不少人采用工作流技术来定义BPM终端.现在,许多研究人员和从业者开始意识到,BPM的定义 ...

  6. ubuntu使用docker-compose安装rabbitmq并实现延迟交换机

    ubuntu使用docker-compose安装rabbitmq并实现延迟交换机 安装rabbitmq 前置条件是安装了docker跟docker-compose 创建docker-compose.y ...

  7. C++核心准则C.43:保证(值类型)可拷贝类有默认构造函数

    C.43: Ensure that a copyable (value type) class has a default constructor C.43:确保(值类型)可拷贝类有默认构造函数 Re ...

  8. rabbitmq队列模式以及交换机模式

    常用命令 ## rabbitmq 常用命令 进入到sbin目录 启用管理插件:rabbitmq-plugins enable rabbitmq_management 启动服务: net start R ...

  9. RabbitMQ(四)交换机exchange

    5.1 exchanges 5.1.1 概念 RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列.实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中. 相反, ...

  10. 四大开源分布式存储_Kubernetes持久化存储方案测试

    在2018年的Garnter技术成熟度曲线中,容器存储出现在了技术触发期,已经开始进入大众的视野.我相信,在未来的两年内,容器存储会随着Kubernetes的进一步成熟和商业化,其地位会越来越重要.如 ...

最新文章

  1. mysql 8.0配置主从同步_MySQL8.0.19开启GTID主从同步CentOS8
  2. 这可能是把策略模式讲的最通俗易懂得文章了!
  3. FSBL UBOOT KERNELROOTFS 启动流程详解 (未完待续)
  4. 奠定了整个计算机科学的基础是什么,冯 诺依曼对计算机科学发展所作的贡献是什么...
  5. h5+js视频播放器控件
  6. python 计算协方差_python 线性代数:[12]求协方差矩阵
  7. php 匹配双字节字符串,收集一些常用的正则表达式(匹配中文字符、匹配双字节字符、匹配HTML标记、匹配空行 and so on~~~)...
  8. Resource Hacker+mysql安装会出现错误“应用程序无法启动因为应用程序的并行配置不正确”...
  9. 针对ArcGIS Server 跨域问题的解释
  10. mybatisplus多表关联查询_Excel、MySQL、PowerBI、Python来告诉你 数据关联与联合不一样
  11. 【报告分享】2021年双11电商营销全景洞察.pdf(附下载链接)
  12. 算法四:回溯和分支界定
  13. Yii2的redis扩展
  14. 解决office 2019打开word、excel慢的问题
  15. mipi传输距离3米_弱电网络工程中网线大于100米怎么办?离300米远用什么线缆较好?...
  16. 科林明伦杯 哈尔滨理工大学第十届程序设计竞赛 (补)
  17. 下取整函数的含义_向上取整⌈⌉和向下取整⌊⌋符号含义及应用
  18. PDR步行者航位推算
  19. js获取当前时间的年月日时分秒以及时间的格式化
  20. 2019/01/07 一位前端实习生 艰辛过程 励志 实习周记(三)——第二 三周

热门文章

  1. Configuration Specification-Handling Unit Management
  2. 三十而立,80后挺立?卧倒,还是爬行?
  3. Java使用httpClient发送请求与数据的解析(有案例)
  4. Python数据处理pdf (中文版带书签)、原书代码、数据集
  5. 小坑记录!安卓调用前置摄像头的时候报错(Suggested resolution map missing resolution for camera1) 解决方法记录
  6. Spring Boot指南-第一部分
  7. ae如何去除视频水印?分享三个简单的方法!
  8. 【2017中国开发者调查报告】2017,人工智能技术如何让中国开发者“倾心”又“上火”...
  9. Python安装常用地图包:GDAL\Shaoely\Fiona
  10. 2017省组队训练 zoj 3385Hanami Party (贪心+栈优化)