-1

我正在尝试接收来自我的鼠兔生产者的消息。我正在关注本教程:https ://www.youtube.com/watch?v=0iB5IPoTDts 。

我可以看到,当我手动运行docker-compose exec backend bash然后运行python consumer.py时,我可以接收消息,并且它们正在通过该print()函数记录到标准输出。但是,当我将以下服务添加到 mydocker-compose.yml时,容器不会记录到标准输出:

rabbitmq_queue:
    build:
        context: .
        dockerfile: Dockerfile
    command: 'python consumer.py && echo hello'
    volumes:
        - .:/app
    depends_on:
        - db

没有错误。当我将命令更改为 时echo hello,容器会很好地将 hello 打印到标准输出。为什么我的服务没有记录到标准输出?此外,它似乎运行正常 - 当我尝试抛出异常时,我的服务错误。当它出错时,它也会开始打印消息。否则它不会打印错误消息。

有没有办法解决这个问题?

consumer.py

import pika

params = pika.URLParameters(
    "hidden thing here"
)

connection = pika.BlockingConnection(params)

channel = connection.channel()

channel.queue_declare(queue="main")


def callback(channel, method, properties, body):
    print("[CONSUMER] Received message in main")
    print(body)
    # raise Exception()

channel.basic_consume(queue="main", on_message_callback=callback, auto_ack=True)

print("[CONSUMER] Started consuming")

channel.start_consuming()

channel.close()
4

1 回答 1

0

您需要真正开始使用消息。就像现在你有一个callback永远不会被调用的函数(并且永远不会在你的代码中被引用)。

channel.basic_consume(queue='main', on_message_callback=callback)
channel.start_consuming()

在代码末尾添加这些行。这会将回调分配为 on 消息函数,start_consuming并告诉 pika 开始使用队列。

此处提供更详细的示例。

于 2021-01-03T20:43:07.157 回答