[英]Manage RabbitMQ auto-delete queues in different threads. Python
我想知道这是否是在不同线程中管理auto_delete队列的正确方法(主要用于测试在连接关闭时我不希望RabbitMQ队列停留的问题)
import pika
from threading import Thread
class ConsumerThread(Thread):
def __init__(self, callback, queue):
Thread.__init__(self)
self.setDaemon(True)
self.callback = callback
self.queue = queue
def run(self):
# stablish connection
connection = pika.BlockingConnection(pika.ConnectionParameters(CONNECTION['address'], CONNECTION['port'], CONNECTION['vhost'], CONNECTION['credentials']))
channel = connection.channel()
# create the auto-delete queue
channel.queue_declare(queue=self.queue, auto_delete=True)
# start consuming
channel.basic_qos(prefetch_count=1)
channel.basic_consume(self.callback, queue=self.queue)
channel.start_consuming()
class Factory:
def __init__(self):
self.queue_init = "init.queue"
self.queue_start = "start.queue"
threads = [ConsumerThread(self.init_callback, self.queue_init), ConsumerThread(self.start_callback, self.queue_start)]
for t in threads:
t.start()
def init_callback(self, ch, method, properties, body):
# doing something
def start_callback(self, ch, method, properties, body):
# doing something
RabbitMQ团队监视rabbitmq-users
邮件列表,并且仅在某些情况下回答有关StackOverflow的问题。
Pika不是线程安全的。 您必须确保BlockingConnection
方法调用发生在运行连接和通道的同一线程上。 根据您的代码,我不确定这种情况是否会发生,因为您在Factory
类中调用了回调,这似乎很奇怪。 为什么在ConsumerThread
没有这些方法呢?
Pika 0.12
和更高版本将包含add_callback_threadsafe
方法,该方法将安排在ioloop线程上执行的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.