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