RabbitMq 生产与消费消息

  • 编写 mq_connection.py 文件(连接Mq)

import pika

host = "127.0.0.1"
port = "5672"


def mq_conn():
    credentials = pika.PlainCredentials('admin', 'admin')  # mq用户名和密码
    # 虚拟队列需要指定参数 virtual_host,如果是默认的可以不填。
    connection = pika.BlockingConnection(
        pika.ConnectionParameters(host='127.0.0.1', port=5672, virtual_host='my_vhost', credentials=credentials))
    channel = connection.channel()

    return channel
  • 生产者(produce)

from py_rabbitmq.mq_connection import mq_conn, pika

conn = mq_conn()

# 声明队列
conn.queue_declare(queue='hello')

for i in range(10):
    conn.basic_publish(exchange='',
                       routing_key='hello',
                       body='Hello World!)
    print("produce is body")

conn.close()
  • 消费者(consume)

from py_rabbitmq.mq_connection import mq_conn

conn = mq_conn()

# 声明队列
conn.queue_declare(queue='hello')


def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)


conn.basic_consume(queue='hello', auto_ack=True, on_message_callback=callback)

conn.start_consuming()
  1. auto_ack 参数 是否做消息确认 默认为Fase 
  2. 如果为True consume会向RabbitMQ发送回执ACK, Mq会认为该条数据已被处理, 队列中的消息就会被删除

你可能感兴趣的:(后端,消息队列)