美文网首页
26. 消息队列有哪些应用场景

26. 消息队列有哪些应用场景

作者: 木叶苍蓝 | 来源:发表于2023-07-11 16:12 被阅读0次

分布式系统不同模块之间的通信,除了远程服务调用以外,消息中间件是另外一个重要的手段。

消息队列,就是传递消息的队列
消息队列是进程之间的一种很重要的通信机制
随着分布式系统的发展,消息队列在系统设计中又有了更多的应用


20230709172801.jpg

消息队列可以用于系统内部组件之间的通信,也可以用于系统跟其他服务之间的交互。
消息队列的使用,增加了系统的可扩展性。

系统解耦

开闭原则,指的是软件实体应该对扩展开发,对修改关闭,尽量保存系统之间的独立。


20230709173020.jpg
系统之间的解耦,使用 RPC 服务调用也可以实现,那使用消息队列有什么好处?

使用消息队列,系统之间可以更好的实现依赖倒转

异步处理

在处理高并发,高可用等系统设计时,如果不需要或者限制于系统承载能力,不能立即处理消息,此时就可以应用消息队列,将请求异步化。
异步处理的一个典型场景就是流量削峰
秒杀抢购的流量峰值是很高的,可以引入消息队列,结合限流工具,对超过系统阈值的请求在消息队列中暂存,等待流量高峰过去以后再进行处理。

请求缓冲

在典型的生产者和消费者模型中,就是通过一个队列来实现缓冲
使用消息队列,可以作为一个缓冲层,平滑各个业务系统之间处理性能的不同等。
企业数据总线(ESB) 的概念,实现的就是内部各个系统之间的集成。

数据分发

消息队列支持一对多的广播机制,可以用来实现数据的分发
典型的比如关系数据库对 binlog 订阅的处理
由于主库的 binlog 只有一份,但是下游的消费方可能包括各种文件索引,离线数据库等
这时候就可以应用消息队列来实现数据的分发
消息队列还可以用来实现分布式事务
利用数据库+本地消息表的方式分布式一致性,是已给非常经典的分布式事务解决方案。

几种常见的消息队列

Apache Kafka

Kafka 是 LinkedIn 开源的一个分布式消息系统
主要使用 Scala 语言开发,已经加入 Apache 顶级项目
Kafka 集群部署时依赖 ZooKeeper 环境
Kafka 可以非常方便地进行水平扩展,支持海量数据的传输
Kafka 的另外一个特定是高吞吐率,在消息持久化写入磁盘的过程中
使用了多种技术来实现读写的高性能,包括磁盘的顺序读写,零拷贝技术等。

Apache RocketMQ

RocketMQ 是阿里巴巴开源的一款消息中间件,使用 Java 语音开发
以消息持久化为例,Linux 文件在写入磁盘时,可能会出现数据丢失的情况
RocketMQ 在写入磁盘时支持同步刷盘方式,即消息存储磁盘成功,才会返回消息发送成功的响应
RocketMQ 尽可能地保证了消息投递中的顺序一致性及可靠性,并且优化了响应时间

Apache RabbitMQ

RabbitMQ 是使用 Erlang 语言编写的一个开源消息队列,功能比较全面,支持多种消息传输的协议
AMQP 是一个异步消息传输的网络协议
RabbitMQ 同时支持 MQTT,STOMP 等协议
RabbitMQ 还支持优先级队列等特性
RabbitMQ 还比较适合企业级应用

如果在一个电商系统的构建中,这三款消息队列可以怎样组合使用呢?

  • Kafka 可以在各类数据埋点中使用,比如电商营销的转化率日志收集和计算
    Kafka 的高性能使得它特别适合应用在各类监控,大数据分析等场景。
  • RocketMQ 对一致性的良好保证,可以应用在电商各级业务调用的拆分中
    比如在订单完成后通知用户,物流信息更新以后对订单状态的更新等。
  • RabbitMQ 可以在数据迁移,系统内部的业务调用中应用
    比如一些后台数据的同步,各种客服和 CRMx 系统。

相关文章

  • 爬虫:4. 消息队列

    消息队列 在构建一个松耦合或是异步的系统时,消息队列是最常用的方法。在爬虫中使用消息队列有哪些好处呢? 通过消息队...

  • 高并发架构消息队列

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队...

  • 关于使用消息队列今天被面试官问倒了

    为什么使用消息队列 其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队...

  • Java 面试系列:消息队列面试题汇总

    1.消息队列的应用场景有哪些? 答:消息队列的应用场景如下。 应用解耦,比如,用户下单后,订单系统需要通知库存系统...

  • 消息队列(三)——kafka

    以下是本消息队列系列文章的传送门: (一)消息队列应用场景 (二)消息队列技术选型 (三)kafka 在通过消息队...

  • 【Kafka系列】1.1 总览 - 分布式消息中间件

    1.kafka的用途和使用场景有哪些? (1)消息系统:应用解构、缓冲、流量削峰、异步通信、提高扩展性等,还有消息...

  • 深度学习之文本与序列--基于Keras的IMDB电影评论分类

    【应用场景】在深度学习中,文本和序列有着很多的应用场景: 文本分类、时间序列分类。eg. 确定一篇文章的主题,确...

  • 该如何选择消息队列?

    在高并发业务场景下,消息队列在流量削峰、解耦上有不可替代的作用。当前使用较多的消息队列有 RabbitMQ、Roc...

  • 队列

    1)列队是什么?2)队列的特点?3)队列的基本操作有哪些?4)队列已被应用的经典场景有哪些?应用场景? 一、队列是...

  • 消息队列应用场景

    1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种: 串行方式:将注册信息写入数据库成功...

网友评论

      本文标题:26. 消息队列有哪些应用场景

      本文链接:https://www.haomeiwen.com/subject/fbrjudtx.html