“消息隊列”是在消息的傳輸過程中保存消息的容器?!跋ⅰ笔窃趦膳_計算機間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字符串;也可以更復雜,可能包含嵌入對象。
“消息隊列”是在消息的傳輸過程中保存消息的容器?!跋ⅰ笔窃趦膳_計算機間傳送的數(shù)據(jù)單位。消息可以非常簡單,例如只包含文本字符串;也可以更復雜,可能包含嵌入對象。消息被發(fā)送到隊列中?!跋㈥犃小笔窃谙⒌膫鬏斶^程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。
消息隊列中間件是分布式系統(tǒng)中重要的組件,主要解決應用解耦,異步消息,流量削鋒等問題,實現(xiàn)高性能,高可用,可伸縮和最終一致性架構。目前使用較多的消息隊列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
針對MQ的核心場景,我們從異步、解耦、削峰填谷等特性進行分析,區(qū)別于傳統(tǒng)的RPC調(diào)用。尤其在引入中間節(jié)點的情況下,通過空間(擁有存儲能力)換時間(RPC同步等待響應)的思想,增加更多的可能性和能力。
1、消息通訊
作為消息隊列,其場景就是實現(xiàn)消息通訊。
應用舉例:微信發(fā)消息、QQ聊天群等。
消息隊列主要有兩種模式:點對點(Point to Point)模式和發(fā)布-訂閱(Publisher-Subscriber)模式。
2、異步通信
針對不需要立即處理消息,尤其那種非常耗時的操作,通過消息隊列提供了異步處理機制,通過額外的消費線程接管這部分進行異步操作處理。
3、應用解耦
在應用和應用之間,提供了異構系統(tǒng)之間的消息通訊的機制,通過消息中間件解決多個系統(tǒng)或異構系統(tǒng)之間除了RPC之外另一種單向通訊的機制。
4、擴展性
因為消息隊列解耦了主流程的處理過程,只要另外增加處理過程即可,不需要改變代碼、不需要調(diào)整參數(shù),便于分布式擴容。
5、流量削峰
在秒殺場景,由于峰值訪問量過大,超出服務能力,則會壓垮服務,導致服務崩潰。此時,可以先將用戶的秒殺請求作為消息存入MQ,然后服務再根據(jù)自身能力慢慢處理這些請求。
優(yōu)點:提示峰值處理能力,提示服務穩(wěn)定性。
應用舉例:秒殺活動、團購搶單等。
6、順序保證
在大多使用場景下,數(shù)據(jù)處理的順序都很重要。大部分消息隊列本來就是排序的,并且能保證數(shù)據(jù)會按照特定的順序來進行處理。
7、數(shù)據(jù)流處理
分布式系統(tǒng)產(chǎn)生的海量數(shù)據(jù)流,如:業(yè)務日志、監(jiān)控數(shù)據(jù)、用戶行為等,針對這些數(shù)據(jù)流進行實時或批量采集匯總,然后導入到大數(shù)據(jù)實時計算引擎,通過消息隊列解決異構系統(tǒng)的數(shù)據(jù)對接能力。
RabbitMQ 在吞吐量方面雖然稍遜于 Kafka 和 RocketMQ ,但是由于它基于 erlang 開發(fā),所以并發(fā)能力很強,性能極其好,延時很低,達到微秒級。但是也因為 RabbitMQ 基于 erlang 開發(fā),所以國內(nèi)很少有公司有實力做erlang源碼級別的研究和定制。
如果業(yè)務場景對并發(fā)量要求不是太高(十萬級、百萬級),那這些消息隊列中,RabbitMQ 一定是你的首選。
新網(wǎng)消息隊列RabbitMQ,通過創(chuàng)建集群的方式來實現(xiàn)RabbitMQ以及所依賴的服務的部署,完全兼容RabbitMQ開源生態(tài)以及多語言客戶端,為用戶提供快速創(chuàng)建、方便管理的消息中間件:
https://www.xinnet.com/cs/rabbitmq.html
免責聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,也不承認相關法律責任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請發(fā)送郵件至:operations@xinnet.com進行舉報,并提供相關證據(jù),一經(jīng)查實,本站將立刻刪除涉嫌侵權內(nèi)容。