消息中間件RabbitMQ

MoYu-zc 2021-08-15 20:51:54 阅读数:281

本文一共[544]字,预计阅读时长:1分钟~
消息 rabbitmq

消息中間件RabbitMQ

1.什麼是消息中間件

MQ全稱為Message Queue,消息隊列是應用程序和應用程序之間的通信方法。

為什麼使用MQ?

在項目中,可將一些無需即時返回且耗時的操作提取出來,進行异步處理,而這種异步處理的方式大大的節省了服務器的請求響應時間,從而提高系統吞吐量

2.應用場景

2.1 任務异步處理

將不需要同步處理的並且耗時長的操作由消息隊列通知消息接收方進行异步處理。提高了應用程序的響應時間。

2.2 應用程序解耦合

MQ相當於一個中介,通過它讓生產者與消費者交互,將應用程序進行解耦合。

2.3 削峰填穀

如某個系統會往數據庫寫數據,但是數據庫只能支撐每秒1000左右的並發寫入,並發量再高就容易宕機。

在系統低峰期的時候並發也就100多個,但在高峰期時候,並發量會突然激增到5000以上,這個時候數據庫肯定會卡死。

1

這時候,可以使用MQ,消息會被MQ保存起來,然後系統就可以按照自己的消費能力來消費,比如每秒1000個數據,慢慢寫入數據庫,就不會卡死數據庫了。

2

但使用了MQ之後,限制消費消息的速度為1000,但是這樣一來,高峰期產生的數據勢必會被積壓在MQ中,高峰就被“削”掉了。

但是因為消息積壓,在高峰期過後的一段時間內,消費消息的速度還是會維持在1000QPS,直到消費完積壓的消息,這就叫做“填穀”

3

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 遠程調用模式;

官網對應模式介紹:https://www.rabbitmq.com/getstarted.html

4

5

個人博客為:
MoYu's HomePage

版权声明:本文为[MoYu-zc]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815205152600n.html