【问题标题】:Why celery did't process the message and delete it?为什么 celery 没有处理消息并删除它?
【发布时间】:2014-09-29 08:08:49
【问题描述】:

我正在使用 php 将消息发送到 rabbitmq 和 python 消费者来处理它。 这就是我所做的。

这部分向rabbitmq发送一个json。

$data = array(
  'id' => 123,
  'url' => 'baidu.com',
);
$msg = new AMQPMessage(json_encode($data));
$channel->basic_publish($msg, $exchange);

这部分接收消息并处理它(使用 celery)。

@app.task
def mytask(json_obj):
    print(json_obj)
    data = json.loads(json_obj)
    thread_id = data['id']
    url = data['url']
    return py_read(thread_id, url)

这是我从控制台得到的:

[2014-09-29 15:51:34,564: WARNING/MainProcess] celery@mickey-Thurley ready.
[2014-09-29 15:51:37,395: WARNING/MainProcess] Received and deleted unknown message. Wrong destination?!?

The full contents of the message body was: body: '{"id":123,"url":"baidu.com"}' (28b)
{content_type:None content_encoding:None
  delivery_info:{'redelivered': False, 'routing_key': '', 'exchange': 'celery', 'delivery_tag': 1, 'consumer_tag': '4'} headers={}}

我确定消费者收到了消息,但是为什么消息没有被处理?我应该怎么做?

【问题讨论】:

    标签: php python rabbitmq celery


    【解决方案1】:

    Celery 任务不仅仅是数据。您还需要有一些东西可以告诉工作人员您实际调用的是什么任务,而您的消息中缺少这些内容。

    与其尝试自己实现,不如使用现有的 Celery PHP 实现之一,例如 this one

    【讨论】:

    • 谢谢,我用一种快速而肮脏的方法解决了它。你的建议很有用。
    猜你喜欢
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2020-11-21
    相关资源
    最近更新 更多