【问题标题】:Pika/RabbitMQ how to create new channel from single connection?Pika/RabbitMQ 如何从单个连接创建新通道?
【发布时间】:2019-10-22 22:48:50
【问题描述】:

我有一个使用 python pica 的方法。这里消费者需要为每个队列创建一个通道。我在编写此代码时遇到错误。

enter image description here

def Process(channel, exc, que):
    channel.exchange_declare(exchange=exc, exchange_type='direct', durable=True)
    result = channel.queue_declare(durable=True, queue=que, auto_delete=False,exclusive=False )

    def callback_rabbit(ch,method,properties,body):
        print("Message received = ", body)

    channel.queue_bind(exchange=exc, queue=que, routing_key=que)
    channel.basic_consume(on_message_callback=callback_rabbit,queue=que, auto_ack=True)
    channel.start_consuming()

def Start():        
    credentials = pika.PlainCredentials('guest','guest')
    connection = pika.BlockingConnection(pika.ConnectionParameters('127.0.0.1','5672','/',credentials))

    items = {"exc":[{"exchangeName":"bam", "queueName":"bam_queue1"},{"exchangeName":"bam", "queueName":"bam_queue2"},{"exchangeName":"bam", "queueName":"bam_queue3"}]}
    for item in items["exc"]:
        channel = connection.channel()
        t_msg = Thread(target=Process, args=(channel,item["exchangeName"],item["queueName"]))
        t_msg.start()

【问题讨论】:

    标签: pika


    【解决方案1】:

    Pika 不是线程安全的。您应该在 Process 方法中创建一个新的连接和通道。


    注意:RabbitMQ 团队会监控 rabbitmq-users mailing list,并且有时只回答 StackOverflow 上的问题。

    【讨论】:

    • 对不起,我不明白。交易所有30个队列。我需要为每个队列创建一个新连接吗?你能给我举个例子吗?
    • 是的,使用 30 个连接(每个线程一个)是一种解决方案,在您的情况下可能是最容易实现的解决方案。
    • 不是每个连接系统都累了吗?不是每个连接系统都使用更多的 CPU 吗?
    • 别担心。此时您的主要关注点应该是生成适用于 Pika 的正确代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多