日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

RabbitMQ 相关概念和方法详解

發(fā)布時間:2025/7/25 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMQ 相关概念和方法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

名詞解釋

  • ConnectionFactory: 與 RabbitMQ 服務(wù)器連接的管理器。
  • Connection: 與 RabbitMQ 服務(wù)器的連接。
  • Channel: 與 Exchange 的連接。
  • Exchange: 接收生產(chǎn)者的消息,并根據(jù)消息的 RoutingKey 和 Exchange 綁定的 BindingKey 分配消息。
  • Queue: 存儲消費(fèi)者的消息。
  • RoutingKey: 指定當(dāng)前消息被誰接收。
  • BindingKey: 指定當(dāng)前 Exchange 下,什么樣的 RoutingKey 會被下派到當(dāng)前綁定的 Queue 中。

exchange_declare 方法詳解

def exchange_declare(self, callback=None, exchange=None, exchange_type='direct', passive=False, durable=False, auto_delete=False, internal=False, nowait=False, arguments=None):
  • callback 如果 nowait=True 且 Exchange.DeclareOk 時,調(diào)用這個回調(diào)方法。
  • exchange 交換器名稱。
  • exchange_type 交換器類型,常見的如 fanout direct topic。
  • passive 如果為 true , 則執(zhí)行聲明或者檢查交換器是否存在。
  • durable 設(shè)置是否持久化。durable 設(shè)置為 true 表示持久化,反之非持久化。持久化可以將交換器存盤,在服務(wù)器重啟的時候不會丟失消息。
  • auto_delete 設(shè)置是否自動刪除。auto_delete 設(shè)置為 true 則表示自動刪除。自動刪除的前提是至少有一個隊(duì)列或者交換器綁定,之后所有與這個交換器綁定的隊(duì)列或者交換器都與此解綁。注意不能錯誤地把這個參數(shù)理解為:"當(dāng)與此交換器連接的客戶端都斷開時,RabbitMQ 會自動刪除本交換器"。
  • internal 設(shè)置是否是內(nèi)置的。如果設(shè)置為 true,則表示是內(nèi)置的交換器,客戶端程序無法直接發(fā)送消息到這個交換器中,只能通過交換器路由到交換器這種方式。
  • nowait 如果設(shè)置為 false, 則不期望 RabbitMQ 服務(wù)器有一個 Exchange.DeclareOk 這樣響應(yīng)。
  • arguments 其他一些結(jié)構(gòu)化參數(shù)。比如:alternate-exchange。

exchange_bind 方法詳解

def exchange_bind(self, callback=None, destination=None, source=None, routing_key='', nowait=False, arguments=None):
  • callback 如果 nowait=True 且 Exchange.DeclareOk 時,調(diào)用這個回調(diào)方法。
  • destinaction 一種交換器。
  • source 消息從 source 交換器轉(zhuǎn)發(fā)到 destination 交換器,從某種程度上看 destination 交換器可以是一種隊(duì)列。
  • routing_key 用來綁定隊(duì)列和交換器的路由鍵。
  • nowait 如果設(shè)置為 false, 則不期望 RabbitMQ 服務(wù)器有一個 Exchange.DeclareOk 這樣響應(yīng)。
  • arguments 其他一些結(jié)構(gòu)化參數(shù)。

queue_declare 方法詳解

def queue_declare(self, queue='', passive=False, durable=False, exclusive=False, auto_delete=False, arguments=None):
  • queue 隊(duì)列名稱。
  • passive 如果為 true , 則執(zhí)行聲明或者檢查隊(duì)列是否存在。
  • durable 設(shè)置是否持久化。為 true 則設(shè)置隊(duì)列為持久化。持久化的隊(duì)列會存盤,在服務(wù)器重啟的時候可以保證不丟失相關(guān)的信息。
  • exclusive 設(shè)置是否排他。為 true 則設(shè)置隊(duì)列為排他的。如果一個隊(duì)列被聲明為排他隊(duì)列,該隊(duì)列對首次聲明它的連接可見,并在連接斷開時自動刪除。這里需要注意三點(diǎn):
    • 排他隊(duì)列是基于連接(Connection)可見的,同一個連接的不同信道(Channel)是可以同時訪問同一個連接創(chuàng)建的排他隊(duì)列。
    • "首次" 是指如果一個連接已經(jīng)聲明了一個排他隊(duì)列,其他連接是不允許建立同名的排他隊(duì)列,這個與普通隊(duì)列不同。
    • 即使該隊(duì)列是持久化的,一旦連接關(guān)閉或者客戶端退出,該隊(duì)列都會被自動刪除,這種隊(duì)列適用于一個客戶端同時發(fā)送和讀取消息的應(yīng)用場景。
  • auto_delete 設(shè)置是否自動刪除。為 true 則設(shè)置隊(duì)列為自動刪除。自動刪除的前提是:至少有一個消費(fèi)者連接到這個隊(duì)列,之后所有與這個隊(duì)列連接的消費(fèi)者都斷開時,才會自動刪除。不能把這個參數(shù)錯誤的理解為:"當(dāng)連接到此隊(duì)列的所有客戶端斷開時,這個隊(duì)列自動刪除",因?yàn)樯a(chǎn)者客戶端創(chuàng)建這個隊(duì)列,或者沒有消費(fèi)者客戶端與這個隊(duì)列連接時,都不會自動刪除這個隊(duì)列。
  • arguments 設(shè)置隊(duì)列的其他一些參數(shù),如 x-message-ttl、x-expires、x-max-length。

queue_bind 方法詳解

def queue_bind(self, queue, exchange, routing_key=None, arguments=None):
  • queue 隊(duì)列名稱。
  • exchange 交換器的名稱。
  • routing_key 用來綁定隊(duì)列和交換器的路由鍵。
  • arguments 定義綁定的一些參數(shù)。

basic_publish 方法詳解

def basic_publish(self, exchange, routing_key, body, properties=None, mandatory=False, immediate=False):
  • exchange 交換器的名稱,指明消息需要發(fā)送到哪個交換器。如果設(shè)置為空字符串,則消息會被發(fā)生到 RabbitMQ 默認(rèn)的交換器中。
  • routing_key 路由鍵,交換器根據(jù)路由鍵將消息存儲到相應(yīng)的隊(duì)列之中。
  • properties 消息的基本屬性集,其包含 14 個屬性成員,分別有 contentType、deliveryMode、proiotity等。
  • body 消息體 payload,真正需要發(fā)送的消息。
  • mandatory 當(dāng)參數(shù)設(shè)置為 true 時,交換器無法根據(jù)自身的類型和路由鍵找到一個符合條件的隊(duì)列,那么 RabbitMQ 會調(diào)用 Basic.Return 命令消息返回給生產(chǎn)者。當(dāng)參數(shù)設(shè)置為 false 時,出現(xiàn)上述情況,則消息直接丟失。
  • immediate 當(dāng)參數(shù)設(shè)置為 true 時,如果交換器在將消息路由到隊(duì)列時發(fā)現(xiàn)隊(duì)列上并不存在任何消費(fèi)者,那么這條消息將不會存入隊(duì)列中。當(dāng)與路由鍵匹配的所有隊(duì)列都沒有消費(fèi)者時,該消息會通過 Basic.Return 返回至生產(chǎn)者。

basic_consume 方法詳解

def basic_consume(self, consumer_callback, queue='', no_ack=False, exclusive=False, consumer_tag=None, arguments=None):
  • consumer_callback 設(shè)置消費(fèi)者的回調(diào)函數(shù)。用來處理 RabbitMQ 推送過來的消息,比如:DefaultConsumer,使用時需要客戶端重寫其中的方法。
  • queue 隊(duì)列的名稱。
  • no_ack 設(shè)置是否自動確認(rèn)。建議設(shè)置成 false,即不自動確認(rèn)。
  • exclusive 設(shè)置是否排他。
  • consumer_tag 消費(fèi)者標(biāo)簽,用來區(qū)分多個消費(fèi)者。
  • arguments 設(shè)置消費(fèi)者的其他參數(shù)。

exchange_type 模式

fanout 模式

  • 任何發(fā)送到 fanout exchange 的消息都會被轉(zhuǎn)發(fā)到與 exchange 綁定的所有的 queue 上。
  • 不需要指定 routing_key, 即使指定了也是無效的。
  • 需要提前將 exchange 與 queue 進(jìn)行綁定, 一個 exchange 可以綁定到多個 queue, 一個 queue 也可以同多個 exchange 進(jìn)行綁定。
  • 接收到消息的 exchange 沒有與任何 queue 綁定, 則消息就會被拋棄。

direct 模式

  • 發(fā)送到 direct exchange 的消息都會被轉(zhuǎn)發(fā)到 routing_key 中指定的 queue。
  • 不需要將 exchange 進(jìn)行任何綁定操作。當(dāng)然也可以進(jìn)行綁定操作,可以將不同的 routing key 與不同的 queue 進(jìn)行綁定,不同的 queue 與不同 exchange 進(jìn)行綁定。
  • 消息需要傳遞一個 routing_key。
  • 如果消息中不存在 routing_key 中綁定的隊(duì)列名,則該消息就會被拋棄。
  • 如果一個 exchange 聲明為 direct,并且綁定中指定了 routing_key,那么發(fā)生消息時。需要同時指明該 exchange 和 routing_key。

topic 模式

  • 這種模式比較復(fù)雜,簡單來說,就是每個隊(duì)列都有其關(guān)心的主題,所有的消息都帶有一個 routing_key,exchange 會將消息轉(zhuǎn)發(fā)到所有關(guān)注主題能與 routing_key 模糊匹配的隊(duì)列。
  • 需要 routing_key 要提前綁定 exchange 與 queue。
  • 在進(jìn)行綁定的時候,要提供一個該隊(duì)列關(guān)心的主題,如:"#.log.#" 表示該隊(duì)列關(guān)心所涉及 log 的消息(一個 routing_key 為 "MQ.log.error" 的消息會被轉(zhuǎn)發(fā)到該隊(duì)列)。
  • "#" 表示 0 個或若干個關(guān)鍵字,"" 表示一個關(guān)鍵字。如 "log." 能與 "log.warn.timeout" 匹配,但是 "log.#" 能與上述匹配。
  • 如果 exchange 沒有發(fā)現(xiàn)能夠與 routing_key 匹配的 Queue,則會拋棄此消息。

轉(zhuǎn)載于:https://www.cnblogs.com/yxhblogs/p/10739137.html

總結(jié)

以上是生活随笔為你收集整理的RabbitMQ 相关概念和方法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。