最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解

 更新時(shí)間:2022年08月31日 16:12:14   作者:IT之一小佬  
這篇文章主要介紹了python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

交換機(jī)模式主要包括:交換機(jī)之發(fā)布訂閱、交換機(jī)之關(guān)鍵字和交換機(jī)之通配符。

1、交換機(jī)之發(fā)布訂閱

 發(fā)布訂閱和簡(jiǎn)單的消息隊(duì)列區(qū)別在于,發(fā)布訂閱會(huì)將消息發(fā)送給所有的訂閱者,而消息隊(duì)列中的數(shù)據(jù)被消費(fèi)一次便消失。所以,RabbitMQ實(shí)現(xiàn)發(fā)布和訂閱時(shí),會(huì)為每一個(gè)訂閱者創(chuàng)建一個(gè)隊(duì)列,而發(fā)布者發(fā)布消息時(shí),會(huì)將消息放置在所有相關(guān)隊(duì)列中。

生產(chǎn)者模式:

示例代碼:

import pika
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的fanout的交換機(jī)
channel.exchange_declare(exchange='logs', exchange_type='fanout')  # 發(fā)布訂閱模式參數(shù)
 
# 3.向logs交換機(jī)中插入數(shù)據(jù):"Hello world"
message = 'info:Hello World!'
channel.basic_publish(exchange='logs',
                      routing_key='',
                      body=message,
                      properties=pika.BasicProperties(
                          delivery_mode=2,  # make message persistent
                      )
                      )
print(" [x] Sent 'Hello World!'")

運(yùn)行結(jié)果:

消費(fèi)者模式:

示例代碼:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的fanout的交換機(jī)
channel.exchange_declare(exchange='logs', exchange_type='fanout')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs', queue=queue_name)
 
# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)

# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:【將程序重復(fù)執(zhí)行三次,三個(gè)消費(fèi)者都收到了同樣的消息】

2、交換機(jī)之關(guān)鍵字

生產(chǎn)者模式:

示例代碼:  【將info分別改為warning、error運(yùn)行】

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的direct的交換機(jī)
channel.exchange_declare(exchange='logs2', exchange_type='direct')  # 發(fā)布訂閱模式參數(shù)
 
# 3.向logs交換機(jī)中插入數(shù)據(jù):"Hello world"
message = 'info:Hello World!'
channel.basic_publish(exchange='logs2',
                      routing_key='info',  # info信息
                      body=message,
                      properties=pika.BasicProperties(
                          delivery_mode=2,  # make message persistent
                      )
                      )
print(" [x] Sent 'Hello World!'")

運(yùn)行結(jié)果:

消費(fèi)者模式:

示例代碼1:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的direct的交換機(jī)
channel.exchange_declare(exchange='logs2', exchange_type='direct')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs2', queue=queue_name, routing_key='info')
channel.queue_bind(exchange='logs2', queue=queue_name, routing_key='waring')
channel.queue_bind(exchange='logs2', queue=queue_name, routing_key='error')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info', 'waring', 'error']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)
 
# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)
 
# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

示例代碼2:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的direct的交換機(jī)
channel.exchange_declare(exchange='logs2', exchange_type='direct')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs2', queue=queue_name, routing_key='info')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info', 'waring', 'error']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)
# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)

# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

示例代碼3:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的direct的交換機(jī)
channel.exchange_declare(exchange='logs2', exchange_type='direct')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs2', queue=queue_name, routing_key='error')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info', 'waring', 'error']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)
 
# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)
 
# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

3、交換機(jī)之通配符

通配符交換機(jī)”與之前的路由模式相比,它將信息的傳輸類型的key更加細(xì)化,以“key1.key2.keyN....”的模式來(lái)指定信息傳輸?shù)膋ey的大類型和大類型下面的小類型,讓消費(fèi)者可以更加精細(xì)的確認(rèn)自己想要獲取的信息類型。而在消費(fèi)者一段,不用精確的指定具體到哪一個(gè)大類型下的小類型的key,而是可以使用類似正則表達(dá)式(但與正則表達(dá)式規(guī)則完全不同)的通配符在指定一定范圍或符合某一個(gè)字符串匹配規(guī)則的key,來(lái)獲取想要的信息。

“通配符交換機(jī)”(Topic Exchange)將路由鍵和某模式進(jìn)行匹配。此時(shí)隊(duì)列需要綁定在一個(gè)模式上。符號(hào)“#”匹配一個(gè)或多個(gè)詞,符號(hào)“*”僅匹配一個(gè)詞。因此“audit.#”能夠匹配到“audit.irs.corporate”,但是“audit.*”只會(huì)匹配到“audit.irs”。(這里與一般的正則表達(dá)式的“*”和“#”剛好相反,這里我們需要注意一下。)

生產(chǎn)者模式:

示例代碼:  【分別將routing_key改為usa.news、news.usa和usa.weather執(zhí)行一遍】

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的topic的交換機(jī)
channel.exchange_declare(exchange='logs3', exchange_type='topic')  # 發(fā)布訂閱模式參數(shù)
 
# 3.向logs交換機(jī)中插入數(shù)據(jù):"Hello world"
message = 'usa.news---------'
channel.basic_publish(exchange='logs3',
                      routing_key='usa.news',  # usa.news
                      body=message,
                      properties=pika.BasicProperties(
                          delivery_mode=2,  # make message persistent
                      )
                      )
print(" [x] Sent 'Hello World!'")

運(yùn)行結(jié)果:

消費(fèi)者模式:

示例代碼1:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的topic的交換機(jī)
channel.exchange_declare(exchange='logs3', exchange_type='topic')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs3', queue=queue_name, routing_key='news.#')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info.#', 'waring.#', 'error.#']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)
# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)
 
 
# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
 
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

示例代碼2:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的topic的交換機(jī)
channel.exchange_declare(exchange='logs3', exchange_type='topic')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs3', queue=queue_name, routing_key='#.news')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info.#', 'waring.#', 'error.#']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)

# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)
# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

示例代碼3:

import pika
 
# 1.連接rabbit
connection = pika.BlockingConnection(pika.ConnectionParameters('192.168.124.104'))
channel = connection.channel()
 
# 2.聲明一個(gè)名為logs類型的topic的交換機(jī)
channel.exchange_declare(exchange='logs3', exchange_type='topic')
 
# 3.創(chuàng)建隊(duì)列
result = channel.queue_declare("", exclusive=True)  # 隨機(jī)生成一個(gè)隊(duì)列名
queue_name = result.method.queue
print(queue_name)
 
# 4.將指定隊(duì)列綁定到交換機(jī)上
channel.queue_bind(exchange='logs3', queue=queue_name, routing_key='#.weather')
 
# # 使用for循環(huán)將指定隊(duì)列綁定到交換機(jī)上
# for key in ['info.#', 'waring.#', 'error.#']:
#     channel.queue_bind(exchange='logs2', queue=queue_name, routing_key=key)

# 5.確定回調(diào)函數(shù)
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
    ch.basic_ack(delivery_tag=method.delivery_tag)
 
 
# 6.確定監(jiān)聽(tīng)隊(duì)列參數(shù)
channel.basic_consume(queue=queue_name,  # 指定隊(duì)列
                      auto_ack=False,  # 手動(dòng)應(yīng)答方式
                      on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
# 7.正式監(jiān)聽(tīng)
channel.start_consuming()

運(yùn)行結(jié)果:

到此這篇關(guān)于python使用pika庫(kù)調(diào)用rabbitmq交換機(jī)模式詳解的文章就介紹到這了,更多相關(guān)python rabbitmq交換機(jī)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python加密word文檔詳解

    Python加密word文檔詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)對(duì)word文檔添加密碼去除密碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • python常用數(shù)據(jù)結(jié)構(gòu)集合詳解

    python常用數(shù)據(jù)結(jié)構(gòu)集合詳解

    這篇文章主要介紹了python常用數(shù)據(jù)結(jié)構(gòu)集合詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-08-08
  • 一次性徹底講透Python中pd.concat與pd.merge

    一次性徹底講透Python中pd.concat與pd.merge

    本文主要介紹了一次性徹底講透Python中pd.concat與pd.merge,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • python線程池threadpool實(shí)現(xiàn)篇

    python線程池threadpool實(shí)現(xiàn)篇

    這篇文章主要為大家詳細(xì)介紹了python線程池threadpool的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python面向?qū)ο笾蓄悾╟lass)的簡(jiǎn)單理解與用法分析

    Python面向?qū)ο笾蓄悾╟lass)的簡(jiǎn)單理解與用法分析

    這篇文章主要介紹了Python面向?qū)ο笾蓄悾╟lass)的簡(jiǎn)單理解與用法,結(jié)合實(shí)例形式分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(class)的基本概念、原理、定義與使用方法,需要的朋友可以參考下
    2020-02-02
  • python自動(dòng)化unittest yaml使用過(guò)程解析

    python自動(dòng)化unittest yaml使用過(guò)程解析

    這篇文章主要介紹了python自動(dòng)化unittest yaml使用過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Tensorflow2.4使用Tuner選擇模型最佳超參詳解

    Tensorflow2.4使用Tuner選擇模型最佳超參詳解

    這篇文章主要介紹了Tensorflow2.4使用Tuner選擇模型最佳超參詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 安裝dbus-python的簡(jiǎn)要教程

    安裝dbus-python的簡(jiǎn)要教程

    這篇文章主要介紹了安裝dbus-python的簡(jiǎn)要教程,dbus-python在Python編程中多用于處理進(jìn)程之間的通信,需要的朋友可以參考下
    2015-05-05
  • Python3實(shí)現(xiàn)zip分卷壓縮過(guò)程解析

    Python3實(shí)現(xiàn)zip分卷壓縮過(guò)程解析

    這篇文章主要介紹了Python3實(shí)現(xiàn)zip分卷壓縮過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    python字符串編碼識(shí)別模塊chardet簡(jiǎn)單應(yīng)用

    有時(shí)候需要先檢測(cè)一個(gè)文件的編碼,然后將其轉(zhuǎn)化為另一種編碼。這時(shí)候就會(huì)用到chardet(chardet是python的一個(gè)第三方庫(kù),是非常優(yōu)秀的編碼識(shí)別模塊)
    2015-06-06

最新評(píng)論

石林| 清原| 伊春市| 镇康县| 乌苏市| 环江| 益阳市| 商洛市| 札达县| 德钦县| 兴业县| 利津县| 北辰区| 龙州县| 淮北市| 定南县| 河北省| 西昌市| 淅川县| 宝应县| 鄯善县| 仲巴县| 东乡县| 财经| 醴陵市| 鱼台县| 徐水县| 永兴县| 元朗区| 宁明县| 含山县| 裕民县| 常熟市| 凤凰县| 崇义县| 循化| 甘洛县| 江城| 建阳市| 凤庆县| 措勤县|