日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

rabbitmq python_Python操作RabbitMQ服务器实现消息队列的路由功能

發(fā)布時(shí)間:2023/12/19 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rabbitmq python_Python操作RabbitMQ服务器实现消息队列的路由功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python使用Pika庫(安裝:sudo pip install pika)可以操作RabbitMQ消息隊(duì)列服務(wù)器(安裝:sudo apt-get install rabbitmq-server),這里我們來看一下MQ相關(guān)的路由功能。

路由鍵的實(shí)現(xiàn)

比如有一個(gè)需要給所有接收端發(fā)送消息的場(chǎng)景,但是如果需要自由定制,有的消息發(fā)給其中一些接收端,有些消息發(fā)送給另外一些接收端,要怎么辦呢?這種情況下就要用到路由鍵了。

路由鍵的工作原理:每個(gè)接收端的消息隊(duì)列在綁定交換機(jī)的時(shí)候,可以設(shè)定相應(yīng)的路由鍵。發(fā)送端通過交換機(jī)發(fā)送信息時(shí),可以指明路由鍵 ,交換機(jī)會(huì)根據(jù)路由鍵把消息發(fā)送到相應(yīng)的消息隊(duì)列,這樣接收端就能接收到消息了。

這邊繼上一篇,還是用send.py和receive.py來模擬實(shí)現(xiàn)路由鍵的功能。send.py表示發(fā)送端,receive.py表示接收端。實(shí)例的功能就是將info、warning、error三種級(jí)別的信息發(fā)送到不同的接收端。

send.py代碼分析

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/usr/bin/env python

#coding=utf8

import pika

connection= pika.BlockingConnection(pika.ConnectionParameters(

'localhost'))

channel= connection.channel()

#定義交換機(jī),設(shè)置類型為direct

channel.exchange_declare(exchange='messages',type='direct')

#定義三個(gè)路由鍵

routings= ['info','warning','error']

#將消息依次發(fā)送到交換機(jī),并設(shè)置路由鍵

for routingin routings:

message= '%s message.' % routing

channel.basic_publish(exchange='messages',

routing_key=routing,

body=message)

print message

connection.close()

receive.py代碼分析

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

#!/usr/bin/env python

#coding=utf8

import pika, sys

connection= pika.BlockingConnection(pika.ConnectionParameters(

'localhost'))

channel= connection.channel()

#定義交換機(jī),設(shè)置類型為direct

channel.exchange_declare(exchange='messages',type='direct')

#從命令行獲取路由鍵參數(shù),如果沒有,則設(shè)置為info

routings= sys.argv[1:]

if not routings:

routings= ['info']

#生成臨時(shí)隊(duì)列,并綁定到交換機(jī)上,設(shè)置路由鍵

result= channel.queue_declare(exclusive=True)

queue_name= result.method.queue

for routingin routings:

channel.queue_bind(exchange='messages',

queue=queue_name,

routing_key=routing)

def callback(ch, method, properties, body):

print " [x] Received %r" % (body,)

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

print ' [*] Waiting for messages. To exit press CTRL+C'

channel.start_consuming()

打開兩個(gè)終端,一個(gè)運(yùn)行代碼python receive.py info warning,表示只接收info和warning的消息。另外一個(gè)終端運(yùn)行send.py,可以觀察到接收終端只接收到了info和warning的消息。如果打開多個(gè)終端運(yùn)行receive.py,并傳入不同的路由鍵參數(shù),可以看到更明顯的效果。

當(dāng)接收端正在運(yùn)行時(shí),可以使用rabbitmqctl list_bindings來查看綁定情況。

路由鍵模糊匹配

路由鍵模糊匹配,就是可以使用正則表達(dá)式,和常用的正則表示式不同,這里的話“#”表示所有、全部的意思;“*”只匹配到一個(gè)詞。看完示例就能明白了。

這邊繼上面的例子,還是用send.py和receive.py來實(shí)現(xiàn)路由鍵模糊匹配的功能。send.py表示發(fā)送端,receive.py表示接收端。實(shí)例的功能大概是這樣:比如你有個(gè)知心好朋友,不管開心、傷心、工作上的還是生活上的事情都可以和她說;還有一些朋友可以分享開心的事情;還有一些朋友,你可以把不開心的事情和她說。

send.py代碼分析

因?yàn)橐M(jìn)行路由鍵模糊匹配,所以交換機(jī)的類型要設(shè)置為topic,設(shè)置為topic,就可以使用#,*的匹配符號(hào)了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/usr/bin/env python

#coding=utf8

import pika

connection= pika.BlockingConnection(pika.ConnectionParameters(

'localhost'))

channel= connection.channel()

#定義交換機(jī),設(shè)置類型為topic

channel.exchange_declare(exchange='messages',type='topic')

#定義路由鍵

routings= ['happy.work','happy.life','sad.work','sad.life']

#將消息依次發(fā)送到交換機(jī),并設(shè)定路由鍵

for routingin routings:

message= '%s message.' % routing

channel.basic_publish(exchange='messages',

routing_key=routing,

body=message)

print message

connection.close()

上例中定義了四種類型的消息,容易理解,就不解釋了,然后依次發(fā)送出去。

receive.py代碼分析

同樣,交換機(jī)的類型要設(shè)定為topic就可以了。從命令行接收參數(shù)的功能稍微調(diào)整了一下,就是沒有參數(shù)時(shí)報(bào)錯(cuò)退出。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

#!/usr/bin/env python

#coding=utf8

import pika, sys

connection= pika.BlockingConnection(pika.ConnectionParameters(

'localhost'))

channel= connection.channel()

#定義交換機(jī),設(shè)置類型為topic

channel.exchange_declare(exchange='messages',type='topic')

#從命令行獲取路由參數(shù),如果沒有,則報(bào)錯(cuò)退出

routings= sys.argv[1:]

if not routings:

print >> sys.stderr,"Usage: %s [routing_key]..." % (sys.argv[0],)

exit()

#生成臨時(shí)隊(duì)列,并綁定到交換機(jī)上,設(shè)置路由鍵

result= channel.queue_declare(exclusive=True)

queue_name= result.method.queue

for routingin routings:

channel.queue_bind(exchange='messages',

queue=queue_name,

routing_key=routing)

def callback(ch, method, properties, body):

print " [x] Received %r" % (body,)

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

print ' [*] Waiting for messages. To exit press CTRL+C'

channel.start_consuming()

打開四個(gè)終端,一個(gè)運(yùn)行如下,表示任何事情都可以和她說:

1

python receive.py"#"

另外一個(gè)終端 運(yùn)行如下,表示可以和她分享開心的事:

1

python receive.py"happy.*"

第三個(gè)運(yùn)行如下,表示工作上的事情可以和她分享:

1

python receive.py"*.work"

最后一個(gè)運(yùn)行python send.py。結(jié)果不難想象出來,就不貼出來了。

總結(jié)

以上是生活随笔為你收集整理的rabbitmq python_Python操作RabbitMQ服务器实现消息队列的路由功能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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