消息中间件管理系统-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,可以使用通配符#、*等。

相关推荐
努力的小郑20 小时前
从一次分表实践谈起:我们真的需要复杂的分布式ID吗?
分布式·后端·面试
AAA修煤气灶刘哥1 天前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
往事随风去2 天前
架构师必备思维:从“任务队列”到“事件广播”,彻底吃透消息队列两大设计模式
消息队列·rabbitmq
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
程序消消乐2 天前
Kafka 入门指南:从 0 到 1 构建你的 Kafka 知识基础入门体系
分布式·kafka
智能化咨询2 天前
Kafka架构:构建高吞吐量分布式消息系统的艺术——进阶优化与行业实践
分布式·架构·kafka
Chasing__Dreams2 天前
kafka--基础知识点--5.2--最多一次、至少一次、精确一次
分布式·kafka
在未来等你2 天前
Elasticsearch面试精讲 Day 17:查询性能调优实践
大数据·分布式·elasticsearch·搜索引擎·面试
大数据CLUB2 天前
基于spark的澳洲光伏发电站选址预测
大数据·hadoop·分布式·数据分析·spark·数据开发