夏天做哪个网站致富,茶叶包装设计,wordpress说明书,向wordpress提交插件什么是消息队列?#xff08;Message queue#xff0c;简称MQ#xff09; 从字面理解就是一个保存消息的一个容器。那么我们为何需要这样一个容器呢#xff1f;
其实就是为了解耦各个系统#xff0c;我们来举个例子#xff1a; 有这么一个简单的场景#xff0c;系统A负…什么是消息队列?Message queue简称MQ 从字面理解就是一个保存消息的一个容器。那么我们为何需要这样一个容器呢
其实就是为了解耦各个系统我们来举个例子 有这么一个简单的场景系统A负责生成userID并调用系统B、C。如果系统BC频繁变化是否需要userID参数则系统A的代码就得不断变化如果哪天又来了系统DEF……也需要这个参数则系统A又要加入很多业务逻辑这样子各他系统之间就容易产生相互影响另外大量的系统与A发生交互也容易产生问题。 加了消息队列后A只负责产生userID至于谁要用这个参数怎么用系统A不管。对这个数据感兴趣的系统自己去取用即可各个系统之间就实现了解耦。而且解耦后整个服务业变成了一个异步的方式系统A产生数据后不用依次调用BCD来累计耗时各系统可以同时来取用消息队列的数据进行处理加大吞吐。 消息队列的特点
先进先出消息队列的顺序在入队的时候就基本已经确定了一般是不需人工干预的。
发布订阅发布订阅是一种很高效的处理方式如果不发生阻塞基本可以当成是同步操作。
持久化持久化确保消息队列的使用不只是一个部分场景的辅助工具而是让消息队列能像数据库一样存储核心的数据。
分布式在现在大流量、大数据的使用场景下支持分布式的部署才能被广泛使用。消息队列的定位就是一个高性能的中间件。
什么是中间件
非底层操作系统软件非业务应用软件不是直接给最终用户使用的不能直接给客户带来价值的软件统称为中间件。 什么是消息中间件
关注于数据的发送和接受利用高效可靠的异步消息传递机制集成分布式系统。 消息中间件的作用解耦并发削峰异步
可以在模块、服务、接口等不同粒度上实现解耦
订阅/消费模式可以在数据粒度上解耦
可提高系统的并发能力集中力量办大事同步部分碎片时间做小时异步部分
可提高系统可用性因为缓冲了系统负载
消息中间件的弊端
系统可用性降低MQ宕机之后整套系统均不能正常使用如果要保障队列可用需要额外机制保障双活或容灾
系统复杂性提高存在消息重复消费、消息丢失、消息传递顺序不能保证的问题
降低数据一致性多个系统消费存在部分成功部分失败的问题数据不一致了如要保持强一致性需要高代价的补偿分布式事务对账
重复消费系统发了两条两条都插入了数据库
消息丢失系统根本没法请求到目标系统
一致性问题系统要再ABC三个系统都执行成功之后才返回成功结果AB成功了C失败了 消息队列的使用场景
消息队列的使用场景有很多最核心的有三个解耦、异步、削峰
解耦一个系统或者一个模块调用了多个系统或者模块相互之间的调用很复杂维护起来很麻烦。此时可以考虑使用消息队列来实现多个系统之间的解耦
异步系统A接受一个请求需要在自己本地写库还需要在系统BCD三个系统写库同步操作比较费时。
削峰高峰时段系统接收到的请求缓存到消息队列供系统根据负载慢慢消化 如秒杀、发邮件、发短信、高并发订单等。
不适合的场景如银行转账、电信开户、第三方支付等。
关键还是要意识到队列的优劣点然后分析场景是否使用。