1、消息队列概述
消息队列(Message Queue): 是一种应用程序对应用程序通信的方式、生产者不断向消息队列中生产消息、消费者不断从队列中获取消息、生产者不是直接和消费者通信。
2、消息队列的实现方式
MQ是消息通信的模型、现在实现MQ有二种主流方式:AMQP、JMS
AMQP:(advanced message queuing protocol)、提供统一消息服务的应用层标准高级消息队列协议、是应用层协议的一个开放标准、不受客户端/中间件不同产品、不同开发语言等条件限制、
常用产品:Erlang中实现有RabbitMQ
JMS:(java messageService): JMS是由sun公司早期提出的消息标准、为java应用提供统一的消息操作、只限java语言使用。
常用产品:RocketMQ 、ActiveMQ
其它:Kafka:分布式消息系统,高吞吐量(由Scala和Java编写)
3、消息队列的作用(为什么要使用消息队列)
3.1、解耦:模块间通信消息发送和接收都通过MQ、
3.2、异步:(当用户执行某一操作时、系统A会立马响应给用户、当用户感觉很快、只是请求还在MQ里等待操作)加快响应速度
3.3、削峰: 削峰、限流(前端发来5000个请求、但mysql只能消化2000请求、其它3000会存在MQ里、慢慢消化)
ActiveMQ:万级、ms级、低概率丢失数据、现使用的人较少
RabbitMQ:万级、微妙级、延时最低,性能好、erlang开发、社区活跃
RocketMQ:10万级、ms级、分布式架构、阿里出品、
Kafka: 10万级、最大的优点就是高吞吐量、适用大数据
4、消息队列的缺点
MQ挂掉:微服务或模块间无法通信。
MQ丢失消息:
MQ消息乱序:
模块响应给MQ的消息的一致性问题: