我正在开发一个Python API,该API使用Celery和Redis和RabbitMQ来管理我的消息。有时,当我向队列中提交一些任务时,它只是不会收到我期望的消息,而是保持空白,而当手动重试它们时,它们可能会运行。它错过的消息通常是相同的,但是我不明白为什么某些特定的参数有时只能起作用。
我尝试了许多代码来提交消息。 第一个:
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}
答案 0 :(得分:0)
我找不到答案,为什么有时Celery和RabbitMQ之间的消息会消失,但是至少我发现将经纪人更改为Redis可以解决我的问题!
如果您对丢失或未发送到RabbitMQ的邮件有困难,请尝试将您的代理更改为Redis。