本文共 1321 字,大约阅读时间需要 4 分钟。
1、什么是消息中间件?
Message Queue,简称之为MQ,即消息队列。
消息队列是应用程序和应用程序之间的通信方法。
2、为什么要使用消息队列?
在项目中,有一些非常耗时但无需即时返回的操作,可以将这些操作提取出来,进行异步处理。
这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
3、消息队列的应用场景?
场景1:异步处理
将不需要同步处理的,并且耗时长的操作由消息队里通知消息接收方进行异步处理,提高了应用程序的响应时间。
场景2:应用解耦
MQ相当于一个中介,生产者通过MQ与消费者交互,它将应用程序进行解耦合。
场景3:流量削峰
如:订单系统,在下单的时候就会往数据库写数据,但是数据库只能支撑每秒1000左右的并发写入。低峰期也就每秒100多个并发写入,而高峰期并发量会突然激增到5000个,这个时候数据库肯定卡死。
如果消息被MQ保存起来,然后系统就可以按照自己的消费能力来消费,比如每秒1000个并发写入,这样慢慢写入数据库,这样就不会卡死数据库。
但是使用MQ之后,限制了消费消息的速度为1000,这样高峰期产生的数据势必会被积压在MQ中,高峰期的流量就被削掉了。但是因为消息积压,在高峰期过后的一段时间内,消息消息的速度还是会维持在1000QPS,直到消费完积压的消息,这就叫做“填谷”。
4、实现MQ的两种主流方式
方式1:基于AMQP实现MQ
AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。AMQP不从API层进行限定,而是直接定义网络交互的数据格式。
方式2:基于JMS实现MQ
JMS(java message service),即java消息服务应用程序接口,是一个java平台中关于面向消息中间件(MOM)的API。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
两者的区别在于:
AMQP | JMS |
只是协议,不规定实现方式,因此是跨语言的 | 限定了必须使用java |
消息模式非常丰富 | 规定了两种消息模式 |
通过规定协议来统一数据交互的格式 | 定义了统一的接口,来对消息进行的操作进行统一 |
5、常见的MQ,如下:
1)、ActiveMQ:基于JMS
2)、zeroMQ:基于C语言开发
3)、RibbitMQ:基于AMQP协议的,erlang语言开发,稳定性好
4)、RocketMQ:基于JMS,阿里巴巴的产品
5)、kafka:类似MQ的产品,分布式消息系统,高吞吐量。
6、什么是RibbitMQ?
官网地址:
RibbitMQ是erlang语言开发的,基于AMQP(advanced message Queue Protocol,高级消息队列协议)协议实现的消息队列。
它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
7、RibbitMQ提供的6种模式
模式1:Simple简单模式
模式2:Work工作模式
模式3:Publish/Subscribe发布与订阅模式
模式4:Routing路由模式
模式5:Topics主题模式
模式6:RPC调用模式(远程调用,不太算MQ)
转载地址:http://cmuii.baihongyu.com/