rabbitmq是乙個訊息**。mq表示的是message queue,即訊息佇列的意思。它的核心原理就是接受和傳送訊息。
rabbitmq相關的專有名詞
(1)生產(producing),即傳送訊息。生產者(producer)指傳送訊息的程式,一般用p表示。
(2)佇列(queue)。訊息儲存在佇列中,通過應用程式和rabbitmq進行傳輸。佇列沒有任何限制,基本上是乙個無限的快取。多個生產者可以將訊息傳送到同乙個佇列,多個消費者也可以從同乙個佇列裡獲取資料。
(3)消費(consuming),即獲取訊息。消費者(consumer)指等待獲取訊息的程式,一般用c表示。
rabbitmq庫
rabbitmq使用的是amqp協議。要使用它必須就需要使用乙個同樣協議的庫。python可從以下幾個庫中選擇:
(1)py-amqplib
(2)txamqp
(3)pika(以下內容均使用pika)
amqp協議
amqp協議是乙個高階抽象層訊息通訊協議。rabbitmq是amqp協議實現的。它包括以下元件:
(1)broker:接收和分發訊息的應用,rabbitmq server就是message broker
.(2)
virtual host:
出於多租戶和安全因素設計的,把amqp的基本元件劃分到乙個虛擬的分組中,類似於網路中的namespace概念。當多個不同的使用者使用同乙個rabbitmq server提供的服務時,可以劃分出多個vhost,每個使用者在自己的vhost建立exchange/queue等。
(3)connection:publisher/comsumer和broker之間的tcp連線。斷開連線的操作只會在client端進行,broker不會斷開連線,除非出現網路故障或broker服務出現問題。
(4)channel:如果每一次訪問rabbitmq都建立乙個connection,在訊息量大的時候建立tcp connection的開銷將是巨大的,效率也較低。channel是在connection內部建立的邏輯連線,如果應用程式支援多執行緒,通常每個thread建立單獨的channel進行通訊,amqp method包含了channel id幫助客戶端和message broker識別channel,所以channel之間是完全隔離的。channel作為輕量級的connection極大減少了作業系統建立tcp connection的開銷。
(5)exchange:message到達broker的第一站,根據分發規則,匹配查詢表中的routing key,分發訊息到queue中去。常用的型別有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。
(6)queue:訊息最終被送到這裡等待consumer取走。乙個message可以被同時拷貝到多個queue中。
(7)binding:exchange和queue之間的虛擬連線,binding中可以包含routing key。binding資訊被儲存到exchange中的查詢表中,用於message的分發依據。
RabbitMQ學習筆記1
博主從事網路程式設計3年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。生產者 消費者與訊息佇列 首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經...
RabbitMQ學習筆記 1
rabbitmq的特性 開源 開發語言是erlang 平台和 商無關性 為幾乎全部開發語言提供了客戶端工具並能執行在所有主流計算機平台上 輕量級 執行核心功能以及諸如管理介面的外掛程式只需要不到40mb記憶體 面向大多數現代語言的客戶端開發庫 靈活控制訊息通訊的平衡性 效能與吞吐量平衡的靈活控制 高...
RabbitMQ學習(1) 介紹
我翻譯官網的文件,僅供自己學習用.rabbitmq 是什麼,它就是乙個訊息佇列,用在 用在不需要及時處理的地方,比如傳送驗證碼,傳送郵件等等,多使用者訂閱,最大化發揮系統效能,rabbitmq是乙個訊息 它接受和 訊息。你可以把它想象成乙個郵局 當你把郵件放在郵箱裡時,你可以確定郵差先生最終會把郵件...