MQ(Message Queue)消息队列
是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。
是基础数据结构中“先进先出”的一种数据机构。指把要传输的数据(消息)放在队列中,用队列机制来实现消息传递——生产者产生消息并把消息放入队列,然后由消费者去处理。消费者可以到指定队列拉取消息,或者订阅相应的队列,由MQ服务端给其推送消息。
MQ的作用:
消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
**解耦:**一个业务需要多个模块共同实现,或者一条消息有多个系统需要对应处理,只需要主业务完成以后,发送一条MQ,其余模块消费MQ消息,即可实现业务,降低模块之间的耦合。
异步:主业务执行结束后从属业务通过MQ,异步执行,减低业务的响应时间,提高用户体验。
削峰:高并发情况下,业务异步处理,提供高峰期业务处理能力,避免系统瘫痪。
MQ的缺点 :
1、系统可用性降低。依赖服务也多,服务越容易挂掉。需要考虑MQ瘫痪的情况
2、系统复杂性提高。需要考虑消息丢失、消息重复消费、消息传递的顺序性
3、业务一致性。主业务和从属业务一致性的处理
JMS规范:
MQ实现参照了jms规范,(规范就是一种约定)
该规范中包括
提供者:实现jms规范的中间件服务器
客户端:发送或者接受消息的应用程序
生产者/发布者:创建并发送消息的客户端
消费者/订阅者:接受并处理消息的客户端
消息:应用程序之间传递的内容
消息模式:在客户端之间传递消息的方式,jms中定义了主题和队列两种模式.
队列模式:
假如生产者发送了100条消息,如果有n个消费者,那么每个订阅者加起来获取到的消息总数是100。
没有时间上限制。只要队列中有消息,消费者可以任意时间去取消息,一个消息只能被一个消费者消费。