消息中间件管理系统-RabbitMQ及其两类传输模型

微服务通讯有两种方式,同步和异步。客户端将请求发送到服务器,异步通讯较同步通讯而言,通过调用事件驱动模型Broker,无需等待服务器返回结果,微服务之间耦合度更低,微服务无需等待订阅者处理完成性能更好,并且做到了故障隔离,不存在级联失败等问题。

MQ,意思为消息队列,分布式系统中的重要组件,用它就可以实现应用解耦、异步消息、流量削峰等问题。消息队列产品有很多,企业级应用较广泛的就是RabbitMQ。

消息队列中的消息分为两类传输模型点对点模型(一个生产者发送的同一条消息只能被一个消费者消费)、发布订阅模型(一个生产者发送的同一条消息可以被多个消费者同时消费)。

点对点模型包含Simple Queue简单消息模型(一个生产者一个消费者)、Worker消息模型(一个生产者、多个消费者,消费者之间可以平均消费也可以竞争消费)。

发布订阅模型又包含Fanout Exchange 广播模式、、Direct Exchange、Topic Exchange

消息发送接收的流程

简单消息模式:首先消息生产者和消息消费者与RabbitMQ通过mq地址、账户密码建立连接,然后建立通道建立队列来存放消息、消息生产者生产投递消息发送给消息队列,消息发送完成后释放资源(SpringAMQP框架中包含了不用写代码,释放资源代码在底层是写在生产者里面的),消费者监听队列订阅消费消息。

Worker消息模型:就是上述中多个消费者绑定到一个队列中,同一条消息只会被一个消费者处理,并且可通过设置修改consumer服务的application.yml文件,将消费者平均消费模式改为竞争模式

复制代码
spring:
  rabbitmq:
    listener:
      simple:
        prefetch: 1 # 消费者一次处理一条消息,处理完毕后再从MQ中获取,即消费者消费改为竞争模式

Fanout Exchange 广播模式:较以上多了Exchanges交换机,交换机绑定不同的队列,不同的消费者监听不同的队列。生产者生产消息,将消息投递到交换机,至于交换机将消息发送给哪个队列,生产者不知道。交换机负责接收生产者的消息,并将消息转发到对应的队列上,交换机本身不能存储消息。队列绑定到指定的交换机上,从交换机中接收消息,队列是用来存储消息的。消费者绑定队列,从队列中获取消息。

Direct Exchange 直接广播模式:Fanout Exchange的交换机将消息发送给哪个队列,生产者不知道,但是在正常的微服务项目中,需要生产者消息被指定的消费者也可理解不同的队列消费,因此产生了Direct Exchange,Direct Exchange交换机可以通过发送消息指定RoutingKey消息队列绑定时指定BindingKey,来实现不同消息类型的消息通过队列将消息发送给指定的消息队列也就发送给了自定的消费者。

Topic Exchange 专题广播模式:就是相比Direct Exchange,可以使用通配符#、*等。

相关推荐
菠萝崽.1 小时前
Elasticsearch进阶篇-DSL
大数据·分布式·elasticsearch·搜索引擎·全文检索·jenkins·springboot
hong_zc2 小时前
服务端高并发分布式结构演进之路
分布式
461K.3 小时前
写spark程序数据计算( 数据库的计算,求和,汇总之类的)连接mysql数据库,写入计算结果
大数据·分布式·spark
却道天凉_好个秋12 小时前
系统架构设计(九):分布式架构与微服务
分布式·架构·系统架构
predisw15 小时前
kafka connect 大概了解
分布式·kafka
计算机毕设定制辅导-无忧学长17 小时前
RabbitMQ 快速上手:安装配置与 HelloWorld 实践(二)
分布式·rabbitmq·ruby
啾啾Fun18 小时前
【Java微服务组件】分布式协调P1-数据共享中心简单设计与实现
java·分布式·微服务
梦想画家21 小时前
Scrapy进阶实践指南:从脚本运行到分布式爬取
分布式·scrapy·数据工程
东阳马生架构1 天前
Seata源码—5.全局事务的创建与返回处理二
分布式·seata·分布式事务
掘金-我是哪吒1 天前
分布式微服务系统架构第133集:运维服务器6年经验,高并发,大数据量系统
运维·服务器·分布式·微服务·系统架构