我正在开发一个Python API,它使用带有Redis和RabbitMQ的Celery来管理我的消息。有时,当我向队列提交一些任务时,它不会收到我期望的消息,它保持为空,当手动重试时,它们可能会运行。它错过的信息通常是一样的,但我不明白为什么一些特定的论点有时只起作用。
我已经尝试了许多代码来提交消息。第一个:
advertising_price_set_item.delay(account_id=account.id, tool_id=tool_id,
ml_item_id=advertising.external_id,
price=price, process_id=process_id)
第二个:
advertising_price_set_item.apply_async(kwargs={'account_id': account.id, 'tool_id': tool_id,
'ml_item_id': advertising.external_id,
'price': price, 'process_id': process_id}, retry=True)
最后:
try:
advertising_price_set_item.apply_async(kwargs={'account_id': account.id, 'tool_id': tool_id,
'ml_item_id': advertising.external_id,
'price': price, 'process_id': process_id}, retry=True,
retry_policy={'max_retries': 44,
'interval_start': 0,
'interval_step': 0.2,
'interval_max': 0.2},)
except Exception as e:
print(e)
logging.error(traceback.format_exc())
但所有这些都在某个时刻失败了,我从未收到任何异常或错误的消息。
RabbitMQ中的消息如下所示:
{'user_id': 1, 'tool_id': 1, 'ml_items_id': ['A123', 'B123', 'C123'], 'price_premium': 0.01, 'price_classic': 0.01, 'price_free': 0.01, 'process_id': 1}
我无法找到为什么有时Celery和RabbitMQ之间的消息会消失的答案,但至少我发现将我的broker更改为Redis解决了我的问题!
如果您在消息丢失或未发送到RabbitMQ时遇到困难,请尝试将您的代理更改为Redis。