消息队列技术选型

简介: 消息队列技术选型

MQ的使用场景

  • 异步化缓冲(最终一致性,柔性事务)

服务解耦

假设A系统发送数据到B、C、D三个系统,如果是选择接口调用发送

  • 若E系统也要这个数据
  • C系统现在不要了
  • 现在A系统又要发送第二种数据了

A系统负责人头秃中。。。A系统还要时刻考虑B、C、D、E四个系统若挂了咋办?我要不要重发?我要不要把消息存起来?


你的业务是否有有类似场景呢?

一个系统或模块,调用了多个系统或模块,互相调用很复杂,维护繁琐。 但其实这个调用是不需要直接同步调用接口的,若用MQ,可以考虑在你的项目里,使用MQ将其异步化解耦。


甚至 redis 也可以


image.pngimage.pngimage.pngimage.png

image.png

异步

image.png

削峰

每天3点到9点,A系统风平浪静,每秒并发请求数量就100。结果每次一到11点~3点,每秒并发请求数量突然会暴增到1w。但系统最大处理能力就只能是每秒处理1000个请求。

MQ的优缺点

系统可用性降低

系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用B、C、D三个系统的接口就好了,ABCD四个系统好好的,没啥问题

你加个MQ进来,万一MQ挂了咋整?MQ挂了,整套系统崩溃了,不就完了。

系统复杂性提高

硬生生加个MQ进来

  • 你怎么保证消息没有重复消费?
  • 怎么处理消息丢失的情况?
  • 怎么保证消息传递的顺序性?


一致性问题:A系统处理完了直接返回成功了,人都以为你这个请求就成功了;但是问题是,要是BCD三个系统那里,BD两个系统写库成功了,结果C系统写库失败了,咋整?你这数据就不一致了。


所以MQ实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,最好之后,你会发现,妈呀,系统复杂度提升了一个数量级。但关键时刻,用还是得用。


相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
消息中间件 存储 cobar
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
|
17天前
|
消息中间件 NoSQL Kafka
【消息队列】如何做技术选型?
【消息队列】如何做技术选型?
21 1
|
消息中间件 存储 缓存
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 上
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 上
|
消息中间件 存储 运维
消息队列与消息中间件概述:消息中间件核心概念与技术选型
消息队列是一个存放消息的容器,消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能、削峰、降低系统耦合性。
343 0
|
消息中间件 大数据 Kafka
|
2月前
|
消息中间件 存储 监控
RabbitMQ:分布式系统中的高效消息队列
RabbitMQ:分布式系统中的高效消息队列
|
7月前
|
消息中间件 存储 网络协议
企业实战(11)消息队列之Docker安装部署RabbitMQ实战
企业实战(11)消息队列之Docker安装部署RabbitMQ实战
137 0
|
2月前
|
消息中间件 Java
springboot整合消息队列——RabbitMQ
springboot整合消息队列——RabbitMQ
76 0
|
4月前
|
消息中间件 JSON Java
RabbitMQ消息队列
RabbitMQ消息队列
46 0