RabbitMq 消息队列 在Python端的应用
https://www.cnblogs.com/Xuuuuuu/p/10895552.html
rabbit_server持久化,消费者端手动确认保证消息不会丢失。具体代码如下:
1对1生产者端代码:
import pika username = '' password = '' credentials = pika.PlainCredentials(username=username,password=password) connection = pika.BlockingConnection(pika.ConnectionParameters(host='',virtual_host='',credentials=credentials)) # connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1')) channel = connection.channel() #声明队列,并设置durable为True,持久化防止rabbit-server挂掉数据丢失 channel.queue_declare(queue='lg_case_state',durable=True) #exchange表示交换器,可以精确的制定消息应发到哪个队列,route_key设置队列的名称,body表示发送的内容 channel.basic_publish(exchange='', routing_key='lg_case_state', body=str(body), properties=pika.BasicProperties( delivery_mode=2, # 消息持久化 )) #关闭连接 connection.close()
1对1消费者端消费json代码:
import pika import json username = '' password = '' credentials = pika.PlainCredentials(username=username,password=password) connection = pika.BlockingConnection(pika.ConnectionParameters(host='',virtual_host='',credentials=credentials)) # connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1')) channel = connection.channel() # 声明队列,如果消息发送到不存在的队列,rabbitmq会自动清除这些消息 channel.queue_declare(queue='lg_case_state',durable=True) # 发送邮件执行函数 def callback(ch, method, properties, body): json_body = json.loads(body.decode().replace('\'', '"')) # bytes=> string=>json print(" [x] Received %r" % (json_body,)) ch.basic_ack(delivery_tag=method.delivery_tag) # 消费者手动应答 # 取消公平分发模式,而是分发给下一个空闲的消费者 # channel.basic_qos(prefetch_count=1) # 取消自动应答,采用手动应答防止邮件发送过程中出错数据丢失 channel.basic_consume(on_message_callback=callback, queue='lg_case_state', auto_ack=False) print(' [*] Waiting for messages. To exit press CTRL+C') channel.start_consuming()