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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3 通过 pika 连接 RabbitMQ 的基本用法相关的知识,希望对你有一定的参考价值。

【RabbitMQ 服务器】

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


【Python 环境】

OS: Windows 10
Python: 3.6.3 x64
pika: 0.11.2


【通过浏览器查看队列状态】

http://192.168.0.xx:15672/api/queues/vhosttest/queuetest


【send.py】

#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】

#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 ***


以上是关于Python3 通过 pika 连接 RabbitMQ 的基本用法的主要内容,如果未能解决你的问题,请参考以下文章

flask 之 rabbit

Pika 连接丢失错误:pika.exceptions.StreamLostError:流连接丢失:ConnectionResetError(104,'对等连接重置')

通过 http 方式获取 RabbitMQ 队列消息数量(python3)

Pika - 处理RabbitMQ连接丢失

RabbitMQ Python Pika-多个消息的连接处理

Rabbit-3.6.5 集群部署