您好,登錄后才能下訂單哦!
小編給大家分享一下關于RabbitMQ應用場景與實例的詳解,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
解決分布式事務的一致性,消息隊列、消息中間件,消息中間件也可以稱消息隊列,是指用高效可靠的消息傳遞機制進行與平臺無關的數據交流,并基于數據通信來進行分布式系統的集成。通過提供消息傳遞和消息隊列模型,可以在分布式環境下擴展進程的通信。
當下主流的消息中間件有RabbitMQ、Kafka、ActiveMQ、RocketMQ等。其能在不同平臺之間進行通信,常用來屏蔽各種平臺協議之間的特性,實現應用程序之間的協同。優點在于能夠在客戶端和服務器之間進行同步和異步的連接,并且在任何時刻都可以將消息進行傳送和轉發,是分布式系統中非常重要的組件,主要用來解決應用耦合、異步通信、流量削峰等問題。
RabbitMQ是使用Erlang編寫的一個開源的消息隊列,本身支持很多的協議:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它變的非常重量級,更適合于企業級的開發。它同時實現了一個Broker構架,這意味著消息在發送給客戶端時先在中心隊列排隊,對路由(Routing)、負載均衡(Load balance)或者數據持久化都有很好的支持。
RabbitMQ從整體上來看是一個典型的生產者消費者模型,主要負責接收、存儲和轉發消息。
生產者:
生產者連接到RabbitMQ Broker,建立一個連接(Connection)開啟一個信道(Channel)
生產者聲明一個交換器,并設置相關屬性,比如交換機類型、是否持久化等
生產者聲明一個隊列井設置相關屬性,比如是否排他、是否持久化、是否自動刪除等
生產者通過路由鍵將交換器和隊列綁定起來
生產者發送消息至RabbitMQ Broker,其中包含路由鍵、交換器等信息
相應的交換器根據接收到的路由鍵查找相匹配的隊列
如果找到,則將從生產者發送過來的消息存入相應的隊列中
如果沒有找到,則根據生產者配置的屬性選擇丟棄還是回退給生產者
關閉信道
關閉連接
消費者:
消費者連接到RabbitMQ Broker ,建立一個連接(Connection),開啟一個信道(Channel)
消費者向RabbitMQ Broker請求消費相應隊列中的消息,可能會設置相應的回調函數
等待RabbitMQ Broker回應并投遞相應隊列中的消息,消費者接收消息
消費者確認(ack) 接收到的消息
RabbitMQ從隊列中刪除相應己經被確認的消息
關閉信道
關閉連接
http://www.sohu.com/a/280203461_411876
為什么要有信道:生產者和消費者都要和RabbitMQ Broker 建立連接,這是一條tcp連接,而操作系統對于TCP連接的創建與銷毀是非常昂貴的開銷。
而高并發的時候,可能每秒有上萬條tcp連接,資源浪費的同時也會超過操作系統每秒所能連接的數量,要在一條tcp連接上操作,又能保證各個線程之間的私密性,所以出現信道channel。
信道是虛擬連接,在connection基礎上的虛擬連接,在應用程序和Rabbit Broker建立tcp連接時,客戶端緊接著建立一個AMQP信道(channel),每個channel有唯一的ID,處理每條AMQP指令都是通過信道完成的。信道就像電纜里的光纖束,一條電纜內含有許多光纖束,允許所有的連接通過多條光線束進行傳輸和接收。
AMQP,高級消息隊列協議,AMQP協議這種降低耦合的機制是基于與上層產品,語言無關的協議。是一種二進制協議,提供客戶端應用與消息中間件之間多通道、協商、異步、安全、中立和高效地交互。從整體來看,AMQP協議可劃分為兩層:
功能層(定義命令,用于實現業務邏輯),傳輸層(基于二進制數據流傳輸,將應用程序調用的指令傳回服務器,并返回結果)。
以上是關于RabbitMQ應用場景與實例的詳解的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。