持久化rabbitmq的模型

Productor:

# -*- coding:utf-8 -*-
# @Author: YOYO
# @Time: 2018/9/8 8:37
# @说明:
import pika


def send_task(task):
    connection = pika.BlockingConnection(pika.ConnectionParameters(
        'localhost'))
    channel = connection.channel()
    # 声明一个exchange
    channel.exchange_declare(exchange='messages', exchange_type='direct')
    # 声明queue
    channel.queue_declare(queue='task_queue1',durable=True)
    # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
    channel.queue_bind(exchange='messages',
                       queue="task_queue1",
                       routing_key="task_queue1")

    channel.basic_publish(exchange='messages',
                          routing_key='task_queue1',
                          body=task,
                          properties=pika.BasicProperties(
                              delivery_mode=2,  # make message persistent
                          )
                          )
    print(" [x] Sent %r" % task)
    connection.close()


send_task("23456788765!")

Consumer:

# -*- coding:utf-8 -*-
# @Author: YOYO
# @Time: 2018/9/8 8:37
# @说明:
import pika

import pika, time


def recv_task():
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', heartbeat_interval=0))
    channel = connection.channel()
    # 定义交换机,设置类型为direct
    channel.exchange_declare(exchange='messages', exchange_type='direct')
    # 生成临时队列,并绑定到交换机上,设置路由键

    # 声明queue
    channel.queue_declare(queue='task_queue1', durable=True)

    def callback(ch, method, properties, body):
        print(" [x] Received %r" % body)
        # time.sleep(20)
        print(" [x] Done")
        print("method.delivery_tag", method.delivery_tag)
        ch.basic_ack(delivery_tag=method.delivery_tag)  # 手动告诉rabbitmq确认任务完成

    channel.queue_bind(exchange='messages',
                       queue="task_queue1",
                       routing_key="task_queue1")

    channel.basic_consume(callback,
                          queue="task_queue1",
                          no_ack=False)

    channel.basic_qos(prefetch_count=1)

    channel.start_consuming()

    print(' [*] Waiting for messages. To exit press CTRL+C')
    # channel.start_consuming()


recv_task()

猜你喜欢

转载自blog.csdn.net/wu0che28/article/details/82527227
今日推荐