国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

rabbitmq中文教程python版 - Topics

ernest.wang / 3435人閱讀

摘要:?jiǎn)卧~可以是任何東西,但通常它們指定了與該消息相關(guān)的一些功能。消息將使用由三個(gè)字兩個(gè)點(diǎn)組成的路由鍵發(fā)送。另一方面,只會(huì)進(jìn)入第一個(gè)隊(duì)列,而只會(huì)進(jìn)入第二個(gè)隊(duì)列。不匹配任何綁定,因此將被丟棄。代碼幾乎與前一個(gè)教程中的代碼相同。

源碼:https://github.com/ltoddy/rabbitmq-tutorial

Topics

(using the Pika Python client)

本章節(jié)教程重點(diǎn)介紹的內(nèi)容

在之前的教程中,我們改進(jìn)了日志記錄系統(tǒng)。我們沒(méi)有使用只有虛擬廣播的fanout交換,而是使用了direct交換,并讓選擇性接收日志成為了可能。

盡管使用direct交換改進(jìn)了我們的系統(tǒng),但它仍然有局限性 - 它不能根據(jù)多個(gè)標(biāo)準(zhǔn)進(jìn)行路由。

在我們的日志系統(tǒng)中,我們可能不僅需要根據(jù)嚴(yán)重性來(lái)訂閱日志,還要根據(jù)發(fā)布日志的來(lái)源進(jìn)行訂閱。您可能從syslog unix工具知道這個(gè)概念,
該工具根據(jù)嚴(yán)重性(info / warning / crit...)和工具(auth / cron / kern ...)來(lái)路由日志。

這會(huì)給我們很大的靈活性 - 因?yàn)槲覀兛赡芟肼?tīng)取來(lái)自"cron"的error日志,而且還聽(tīng)取來(lái)自"kern"的所有日志。

為了在我們的日志系統(tǒng)中實(shí)現(xiàn)這一點(diǎn),我們需要了解更復(fù)雜的topic交換。

Topic 交換

發(fā)送到topic交換的消息必須有規(guī)范的routing_key - 它必須是由點(diǎn)分隔的單詞列表。單詞可以是任何東西,但通常它們指定了與該消息相關(guān)的一些功能。
一些有效的routing_key例子: "stock.usd.nyse","nyse.vmw","quick.orange.rabbit"。只要您愿意,路由鍵中可以有任意的單詞,但最多255個(gè)字節(jié)。

綁定鍵也必須是相同的形式。topic交換背后的邏輯與direct topic交換背后的邏輯類似 - 使用特定路由鍵發(fā)送的消息將被傳遞到與匹配綁定鍵綁定的所有隊(duì)列。
但是綁定鍵有兩個(gè)重要的特殊情況:

* (star) 可以代替一個(gè)字。

# (hash) 可以替代零個(gè)或多個(gè)單詞。

在這個(gè)例子中解釋這個(gè)很簡(jiǎn)單:

在這個(gè)例子中,我們將發(fā)送所有描述動(dòng)物的消息。消息將使用由三個(gè)字(兩個(gè)點(diǎn))組成的路由鍵發(fā)送。
路由關(guān)鍵字中的第一個(gè)單詞將描述速度,第二個(gè)顏色和第三個(gè)物種:" "。

我們創(chuàng)建了三個(gè)綁定:Q1綁定了綁定鍵" *.orange.* ",Q2綁定了" *.*.rabbit "和" lazy.#"。

這些綁定可以概括為:

Q1對(duì)所有的橙色動(dòng)物都感興趣。

Q2希望聽(tīng)到關(guān)于兔子的一切,以及關(guān)于懶惰動(dòng)物的一切。

將路由鍵設(shè)置為"quick.orange.rabbit"的消息將傳遞到兩個(gè)隊(duì)列。消息"lazy.orange.elephant"也會(huì)去他們兩個(gè)。
另一方面,"quick.orange.fox"只會(huì)進(jìn)入第一個(gè)隊(duì)列,而"lazy.brown.fox"只會(huì)進(jìn)入第二個(gè)隊(duì)列。
"lazy.pink.rabbit"只會(huì)傳遞到第二個(gè)隊(duì)列一次,即使它匹配了兩個(gè)綁定。
"quick.brown.fox"不匹配任何綁定,因此將被丟棄。

如果我們違反我們的合同并發(fā)送帶有一個(gè)或四個(gè)單詞的消息,如"orange"或"quick.orange.male.rabbit",
會(huì)發(fā)生什么情況?那么,這些消息將不匹配任何綁定,并會(huì)丟失。

另一方面,"lazy.orange.male.rabbit"即使有四個(gè)單詞,也會(huì)匹配最后一個(gè)綁定,并將傳遞到第二個(gè)隊(duì)列。

direct change

  話題交換功能強(qiáng)大,可以像其他交流一樣行事。
  當(dāng)使用" # "(散列)綁定鍵綁定隊(duì)列時(shí),它將接收所有消息,
  而不管路由密鑰如何 - 就像在*fanout*交換中一樣。
  當(dāng)在綁定中沒(méi)有使用特殊字符"*"(星號(hào))和"#"(散列)時(shí),主題交換將像*direct*交換一樣。
把它放在一起

我們將在我們的日志系統(tǒng)中使用topic交換。我們首先假定日志的路由鍵有兩個(gè)單詞:" . "。

代碼幾乎與前一個(gè)教程中的代碼相同 。

emit_log_topic.py的代碼:

#!/usr/bin/env python
import sys
import pika

connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()

channel.exchange_declare(exchange="topic_logs",
                         exchange_type="topic")

routing_key = sys.argv[1:] if len(sys.argv) > 2 else "anonymous.info"
message = " ".join(sys.argv[2:]) or "Hello World"
channel.basic_publish(exchange="topic_logs",
                      routing_key=routing_key,
                      body=message)

print(" [x] Sent %r:%r" % (routing_key, message))
connection.close()

receive_logs_topic.py的代碼:

#!/usr/bin/env python
import sys
import pika

# connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
connection = pika.BlockingConnection(pika.ConnectionParameters("172.17.0.2"))
channel = connection.channel()

channel.exchange_declare(exchange="topic_logs",
                         exchange_type="topic")

result = channel.queue_declare(exclusive=True)
queue_name = result.method.queue

binding_keys = sys.argv[1:]
if not binding_keys:
    sys.stderr.write("Usage: %s [binding_key]...
" % sys.argv[0])
    sys.exit(1)

for binding_key in binding_keys:
    channel.queue_bind(exchange="topic_logs",
                       queue=queue_name,
                       routing_key=binding_key)

print(" [*] Waiting for logs. To exit press CTRL+C")


def callback(ch, method, properties, body):
    print(" [x] %r:%r" % (method.routing_key, body))


channel.basic_consume(callback,
                      queue=queue_name,
                      no_ack=True)

channel.start_consuming()

要接收所有日志運(yùn)行:

python receive_logs_topic.py "#"

要從設(shè)施“ kern ” 接收所有日志:

python receive_logs_topic.py "kern.*"

或者,如果您只想聽(tīng)到關(guān)于“ critical ”日志的信息:

python receive_logs_topic.py "*.critical"

您可以創(chuàng)建多個(gè)綁定:

python receive_logs_topic.py "kern." ".critical"

發(fā)布帶有路由鍵“ kern.critical ”類型的日志:

python emit_log_topic.py "kern.critical" "A critical kernel error"

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/41439.html

相關(guān)文章

  • rabbitmq中文教程python - 介紹

    摘要:每當(dāng)我們收到一條消息,這個(gè)回調(diào)函數(shù)就被皮卡庫(kù)調(diào)用。接下來(lái),我們需要告訴這個(gè)特定的回調(diào)函數(shù)應(yīng)該從我們的隊(duì)列接收消息為了讓這個(gè)命令成功,我們必須確保我們想要訂閱的隊(duì)列存在。生產(chǎn)者計(jì)劃將在每次運(yùn)行后停止歡呼我們能夠通過(guò)發(fā)送我們的第一條消息。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 介紹 RabbitMQ是一個(gè)消息代理:它接受和轉(zhuǎn)發(fā)消息。你...

    yimo 評(píng)論0 收藏0
  • rabbitmq中文教程python - 工作隊(duì)列

    摘要:我們將任務(wù)封裝為消息并將其發(fā)送到隊(duì)列。為了確保消息永不丟失,支持消息確認(rèn)。沒(méi)有任何消息超時(shí)當(dāng)消費(fèi)者死亡時(shí),將重新傳遞消息。發(fā)生這種情況是因?yàn)橹辉谙⑦M(jìn)入隊(duì)列時(shí)調(diào)度消息。這告訴一次不要向工作人員發(fā)送多個(gè)消息。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 工作隊(duì)列 showImg(https://segmentfault.com/img/r...

    tabalt 評(píng)論0 收藏0
  • rabbitmq中文教程python - 發(fā)布 / 訂閱

    摘要:交易所在本教程的前幾部分中,我們發(fā)送消息并從隊(duì)列中接收消息。消費(fèi)者是接收消息的用戶的應(yīng)用程序。中的消息傳遞模型的核心思想是生產(chǎn)者永遠(yuǎn)不會(huì)將任何消息直接發(fā)送到隊(duì)列中。交換和隊(duì)列之間的關(guān)系稱為綁定。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 發(fā)布 / 訂閱 (using the Pika Python client) 本章節(jié)教程重點(diǎn)介紹的...

    alphahans 評(píng)論0 收藏0
  • rabbitmq中文教程python - 路由

    摘要:為了避免與參數(shù)混淆,我們將其稱為綁定鍵。直接交換我們之前教程的日志記錄系統(tǒng)將所有消息廣播給所有消費(fèi)者。在這種設(shè)置中,使用路由鍵發(fā)布到交換機(jī)的消息將被路由到隊(duì)列。所有其他消息將被丟棄。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 路由 本章節(jié)教程重點(diǎn)介紹的內(nèi)容 在之前的教程中,我們構(gòu)建了一個(gè)簡(jiǎn)單的日志系統(tǒng) 我們能夠?qū)⑷罩鞠V播給許多接收...

    Hwg 評(píng)論0 收藏0
  • rabbitmq中文教程python - 遠(yuǎn)程過(guò)程調(diào)用

    摘要:通常用于命名回調(diào)隊(duì)列。對(duì)每個(gè)響應(yīng)執(zhí)行的回調(diào)函數(shù)做了一個(gè)非常簡(jiǎn)單的工作,對(duì)于每個(gè)響應(yīng)消息它檢查是否是我們正在尋找的。在這個(gè)方法中,首先我們生成一個(gè)唯一的數(shù)并保存回調(diào)函數(shù)將使用這個(gè)值來(lái)捕獲適當(dāng)?shù)捻憫?yīng)。 源碼:https://github.com/ltoddy/rabbitmq-tutorial 遠(yuǎn)程過(guò)程調(diào)用(RPC) (using the Pika Python client) 本章節(jié)教程...

    chuyao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<