我有以下脚本:
celery_tasks.py
from celery import Celery
app = Celery(broker='amqp://guest:guest@localhost:5672//')
app.conf.task_default_queue = 'test_queue'
@app.task(acks_late=True)
def test(a):
return a
publish.py
from celery_tasks import test
test.delay('abc')
当我运行publish.py并启动工作程序(celery -A celery_tasks工作程序--loglevel = DEBUG)时,“ abc”内容将发布在“ test_queue”中,并由工作程序使用。
工人是否有办法消费队列中未被Celery发布的东西?例如,当我通过RabbitMQ直接在test_queue中放入某些内容而没有通过Celery发布者,并运行Celery worker时,它给了我以下警告:
WARNING / MainProcess]已接收和删除未知消息。目的地不正确?!?
邮件正文的完整内容为:正文:'abc'(3b)
{content_type:无content_encoding:无 delivery_info:{'exchange':'','redelivered':False,'delivery_tag':1,'consumer_tag':'None2','routing_key':'test_queue'}标头= {}}
有没有办法解决这个问题?
答案 0 :(得分:1)
这是一个较晚的答案,但自定义消费者可能会为您提供帮助。我正在使用它来消费来自Rabbitmq的消息。这些消息是使用pika从另一个应用程序中填充的。
http://docs.celeryproject.org/en/latest/userguide/extending.html#custom-message-consumers
答案 1 :(得分:0)
Celery具有特定的格式和需要维护的一组标题以符合该格式。因此,您将不得不对其进行反向工程,以使芹菜不产生符合芹菜的消息。 请记住,实际上不是通过芹菜在代理之间发送消息,而是发送任务,这是增强型消息,因此amqp消息的标头部分有额外的内容