通过多重处理实现多个消费者Rabbitmq

时间:2019-07-19 07:31:53

标签: python multithreading rabbitmq multiprocessing pika

python的新手。 我正在尝试为RabbitMQ客户端创建多个使用者。 我正在使用PIKA并尝试进行多处理。 似乎正在连接但无法维持循环。 你能帮忙吗? 代码的一部分还应注意通过回调的writer选项。

它应该开始循环并且应该总是消耗

import multiprocessing
import time
import pika
# this is the writer part
def callback(ch, method, properties, body):
    print (" [x] %r received %r" % (multiprocessing.current_process(), body,))
    time.sleep(body.count('.'))
    # print " [x] Done"
    ch.basic_ack(delivery_tag=method.delivery_tag)

def consume():
    credentials = pika.PlainCredentials(userid, password)
    parameters = pika.ConnectionParameters(url, port, '/', credentials)
    connection = pika.BlockingConnection(
        parameters=parameters)
    channel = connection.channel()
    channel.queue_declare(queue='queuename', durable=True)
    channel.basic_consume('queuename',callback)
    print (' [*] Waiting for messages. To exit press CTRL+C')
    channel.start_consuming()

userid = "user"
password = "pwd"
url = "localhost"
port = 5672

if __name__ == "__main__":

    workers = 5
    pool = multiprocessing.Pool(processes=workers)
    for i in range(0, workers):
        pool.apply_async(consume)

    #Stay alive
    try:
        while True:

1 个答案:

答案 0 :(得分:1)

您没有在子流程中执行任何异常处理,所以我猜是正在抛出您不期望的异常。 This code在我的环境中可以使用Pika 1.1.0和Python 3.7.3正常工作。

在检查body.count()中的异常之前,将抛出TypeError,因为在这种情况下body不是str

请注意,根据these docs,我正在使用正确的方法来等待子流程。


注意: RabbitMQ团队监视rabbitmq-users mailing list,并且有时仅在StackOverflow上回答问题。