RabbitMQ研究与应用
一、 背景介紹
1. 相關概念
AMQP : Advanced Message Queuing Protocol , ?高級消息隊列協議, 是應用層協議的一個開發標準,為面向消息的中間件設計。
AMQP 的主要特征是面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全性要求很嚴格
二、 基本原理
1. 核心組件: Exchange & Queue
RabbitMQ的兩大核心組件是Exchange和Queue
上圖中, Exchange和Queue,這兩者都是在server端,又稱為Broker, 這部分是RabbitMQ實現的。而藍色的則是客戶端,通常有Producer和Consumer兩種類型
Exchange, 又稱交換器, 接受消息和路由信息,然后將消息發送給消息隊列。對于每一個虛擬主機內部,交換器有獨一無二的名字。應用程序在其權限范圍內可以自由的創建、共享、使用和銷毀交換機實例
消息隊列是一個具名緩存區,它們代表一組消費者應用程序保存消息。應用程序在其權限范圍之內可以自由的創建、共享、使用和消費消息隊列
消息隊列提供了有限制的先進先出保證。服務器會將從某一個生產者發出的同等優先級的消息按照它們進入隊列的順序傳遞給某個消費者,萬一某些消息不能被消費者處理,它們可能會被打亂順序重新傳遞
消息隊列將消息保存在內存、硬盤,或者這兩者的組合之中。消息隊列限定在虛擬主機范圍之中,消息隊列保存消息,并將消息分發給一個或多個訂閱客戶端
消息隊列會跟蹤消息的獲取情況,消息要出隊就必須被獲取(acquire和consume是兩個動作,先執行acquire,相對于對消息加鎖)。這阻止了多個客戶端同時獲取和消費同一條消息,也可以被用來做單個隊列多個消費者之間的負載均衡
2. 重要特性: 持久化
隊列和交換機有一個創建時指定的標志durable(持久化)。durable的唯一含義就是具有這個標志的隊列和交換機會在重啟之后重新建立,它不表示說在隊列當中的消息會在重啟后恢復。
3. 核心概念:綁定
綁定就是將一個特定的Exchange和一個特定的Queue綁定起來,綁定關鍵字稱為BindingKey
程序中語句聲明方法為:
channel.queueBind("Exchange", "Queue", "BindingKey");
Exchange和Queue的綁定可以是多對多的關系。每個發送給Exchange的消息都有一個叫做Routingkey的關鍵字,Exchange要想將該消息轉發給特定隊列,該隊列與交換器的BindingKey必須與消息的RoutingKey相匹配才行。
4. 通信過程
上圖中,左邊的客戶向右邊的客戶發送消息
1. 在RabbitMQ中申明Connection
2. 在RabbitMQ中申明Connection
3. 左邊的客戶獲取Connection
4. 左邊的客戶獲取Channel
5. 定義Exchange,Queue
6, 使用一個RoutingKey將Queue Binding 到一個Exchange上
7, 通過指定一個Exchange和一個RoutingKey來講消息發送到對應的Queue上
8. 接收方在接收時也是獲取Connection,接著獲取channel,然后指定一個Queue直接到它關心的Queue上取消息,它對Exchange,RoutingKey以及如何binding都不關心,到對應的Queue上取消息就可以了
總結
以上是生活随笔為你收集整理的RabbitMQ研究与应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 融合CDN,纾解数据拥塞之困
- 下一篇: CentOS6.5下RabbitMQ安装