Python3 通过 pika 连接 RabbitMQ 的基本用法

简介:

【RabbitMQ 服务器】

1
2
3
4
5
6
# 在 vhosttest 里面有 exchangetest 和 queuetest 通过 rkeytest 绑定
Broker: 192.168.0.xx
virtual host: vhosttest
Exchange: exchangetest 
Queue: queuetest 
Routing key: rkeytest


【Python 环境】

1
2
3
OS: Windows 10
Python: 3.6.3 x64
pika: 0.11.2


【查看队列状态】

1
2
3
4
5
6
7
8
9
# 通过浏览器查看队列状态
http: //192 .168.0.xx:15672 /api/queues/vhosttest/queuetest 
 
# 通过命令行查看队列状态
curl -u user:password http: //192 .168.0.xx:15672 /api/queues/vhosttest/queuetest   |  jq
 
# 通过命令行查看队列长度
curl -s -u user:password http: //192 .168.0.xx:15672 /api/queues/vhosttest/queuetest   | \
     jq  '.backing_queue_status.len'


【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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#encoding: utf-8
#author: walker
#date: 2018-01-31
#summary: 发送方/生产者
 
import  os, sys, time
import  pika
 
def  Main():
     credentials  =  pika.PlainCredentials( "test" "test" )
     parameters  =  pika.ConnectionParameters(host = "192.168.0.xx"
                                             virtual_host = 'vhosttest'
                                             credentials = credentials)
     connection  =  pika.BlockingConnection(parameters)     # 连接 RabbitMQ
 
     channel  =  connection.channel()           # 创建频道
     
     queue  =  channel.queue_declare(queue = 'queuetest' )      # 声明或创建队列
     
     while  True :   # 循环向队列中发送信息
         message  =  time.strftime( '%H:%M:%S' , time.localtime())
         channel.basic_publish(exchange = 'exchangetest' ,  
                                 routing_key = 'rkeytest' ,
                                 body = message)
         
         print ( 'send message: %s'  %   message)     
 
         while  True :   
             # 检查队列,以重新得到消息计数
             queue  =  channel.queue_declare(queue = 'queuetest' , passive = True )     
             messageCount  =  queue.method.message_count
             print ( 'messageCount: %d'  %  messageCount)
             if  messageCount <  100 :
                 break
             time.sleep( 1 )
     
     # 关闭连接
     connection.close()
 
if  __name__  = =  '__main__' :
     Main()


【recv.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
32
33
#encoding: utf-8
#author: walker
#date: 2018-01-31
#summary: 接收方/消费者
 
import  os, sys, time
import  pika
 
# 接收处理消息的回调函数
def  ConsumerCallback (channel, method, properties, body):
     print ( "Received %s"  %  body)
 
 
def  Main():
     credentials  =  pika.PlainCredentials( "test" "test" )
     parameters  =  pika.ConnectionParameters(host = "192.168.0.xx"
                                             virtual_host = 'vhosttest'
                                             credentials = credentials)
     connection  =  pika.BlockingConnection(parameters)     # 连接 RabbitMQ
     
     channel  =  connection.channel()           # 创建频道
     
     queue  =  channel.queue_declare(queue = 'queuetest' )      # 声明或创建队列
     
     # no_ack=True 开启自动确认,不然消费后的消息会一直留在队列里面
     # no_ack = no_manual_ack = auto_ack;不手动应答,开启自动应答模式
     channel.basic_consume(ConsumerCallback, queue = 'queuetest' , no_ack = True )
     print ( 'Wait Message ...' )
     
     channel.start_consuming()
 
if  __name__  = =  '__main__' :
     Main()


【相关阅读】

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/2067244如需转载请自行联系原作者

RQSLT
相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
打赏
0
0
0
0
89
分享
相关文章
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
136 68
|
2月前
|
Python三引号用法与变量详解
本文详细介绍了Python中三引号(`&quot;&quot;&quot;` 或 `&#39;&#39;&#39;`)的用法,包括其基本功能、如何在多行字符串中使用变量(如f-string、str.format()和%操作符),以及实际应用示例,帮助读者更好地理解和运用这一强大工具。
65 2
FreeMQTT:一款Python语言实现的开源MQTT Server
FreeMQTT 是一款用 Python 语言并基于 Tornado 开发的开源 MQTT 服务器,支持 MQTT3.1.1 和 MQTT5.0 协议,提供多租户安全隔离、高效 Topic 匹配算法及实时上下线通知等功能,适用于 IoT 场景。快速启动仅需克隆仓库、安装依赖并运行服务。
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
521 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
深入理解Python装饰器:用法与实现
【10月更文挑战第7天】深入理解Python装饰器:用法与实现
25 1
深入理解Python中的生成器:用法及应用场景
【10月更文挑战第7天】深入理解Python中的生成器:用法及应用场景
95 1
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
195 0
案例学Python:filter()函数的用法,高级!
`filter()`函数是Python中处理序列数据的强大工具,它允许我们高效地根据条件过滤元素。通过结合匿名函数、常规函数或直接利用Python的内置逻辑,`filter()`提供了灵活且高效的过滤机制,尤其在大数据处理和内存敏感的应用中展现出其价值。掌握 `filter()`的使用,不仅能提升代码的可读性和效率,还能更好地适应Python的函数式编程风格。
53 2
|
4月前
|
Python中正则表达式(re模块)用法详解
Python中正则表达式(re模块)用法详解
68 2