我正在使用php将消息发送到rabbitmq和python使用者来处理它。 这就是我所做的。
这部分将json发送给rabbitmq。
$data = array(
'id' => 123,
'url' => 'baidu.com',
);
$msg = new AMQPMessage(json_encode($data));
$channel->basic_publish($msg, $exchange);
此部分接收消息并处理它(使用芹菜)。
@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={}}
我确定消费者收到了消息,但为什么消息没有被处理?我应该怎么做来处理它?
答案 0 :(得分:1)
Celery任务不仅仅是数据。您还需要有一些东西告诉工作人员您实际呼叫的任务,以及您的消息中缺少的任务。
您可能应该使用其中一个Celery PHP实现,例如this one,而不是尝试自己实现。