消息中間件RabbitMQ
1.什么是消息中間件
MQ全稱為Message Queue,消息隊列是應用程序和應用程序之間的通信方法。
為什么使用MQ?
在項目中,可將一些無需即時返回且耗時的操作提取出來,進行異步處理,而這種異步處理的方式大大的節省了服務器的請求響應時間,從而提高了系統的吞吐量
2.應用場景
2.1 任務異步處理
將不需要同步處理的並且耗時長的操作由消息隊列通知消息接收方進行異步處理。提高了應用程序的響應時間。
2.2 應用程序解耦合
MQ相當於一個中介,通過它讓生產者與消費者交互,將應用程序進行解耦合。
2.3 削峰填谷
如某個系統會往數據庫寫數據,但是數據庫只能支撐每秒1000左右的並發寫入,並發量再高就容易宕機。
在系統低峰期的時候並發也就100多個,但在高峰期時候,並發量會突然激增到5000以上,這個時候數據庫肯定會卡死。
這時候,可以使用MQ,消息會被MQ保存起來,然后系統就可以按照自己的消費能力來消費,比如每秒1000個數據,慢慢寫入數據庫,就不會卡死數據庫了。
但使用了MQ之后,限制消費消息的速度為1000,但是這樣一來,高峰期產生的數據勢必會被積壓在MQ中,高峰就被“削”掉了。
但是因為消息積壓,在高峰期過后的一段時間內,消費消息的速度還是會維持在1000QPS,直到消費完積壓的消息,這就叫做“填谷”
3. AMQP 和 JMS
MQ是消息通信的模型;實現MQ的大致有兩種主流方式:AMQP、JMS。
3.1 AMQP
AMQP 是一種協議,更准確的說是一種 binary wire-level protocol(鏈接協議)。與 JMS 的本質差別 : AMQP不從API層進行限定,而是直接定義網絡交換的數據格式。
3.2 JMS
JMS 即Java消息服務(JavaMessage Service)應用程序接口,是一個Java平台中關於面向消息中間件(MOM)的API,用於在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。
3.3 AMQP 與 JMS 區別
- JMS 是定義了統一的接口,來對消息操作進行統一; AMQP是通過規定協議來統一數據交互的格式
- JMS 限定了必須使用Java語言; AMQP只是協議,不規定實現方式,因此是跨語言的。
- JMS 規定了兩種消息模式; AMQP的消息模式更加豐富
4.多種消息中間件
常見的消息隊列有如下:
- ActiveMQ:基於 JMS
- ZeroMQ:基於 C 語言開發
- RabbitMQ:基於 AMQP 協議,erlang 語言開發,穩定性好
- RocketMQ:基於 JMS,阿里巴巴產品
- Kafka:類似MQ的產品;分布式消息系統,高吞吐量
RabbitMQ是由erlang語言開發,基於AMQP(Advanced Message Queue 高級消息隊列協議)協議實現的消息隊列,它是一種應用程序之間的通信方法,消息隊列在分布式系統開發中應用非常廣泛。
RabbitMQ官方地址:http://www.rabbitmq.com/
RabbitMQ提供了6種模式:
- 簡單模式
- work模式
- Publish/Subscribe 發布與訂閱模式
- Routing 路由模式
- Topics 主題模式
- RPC 遠程調用模式;
個人博客為:
MoYu's HomePage