芹菜有时不创建任务

时间:2018-07-31 23:22:39

标签: python rabbitmq queue celery message

我正在开发一个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}

1 个答案:

答案 0 :(得分:0)

我找不到答案,为什么有时Celery和RabbitMQ之间的消息会消失,但是至少我发现将经纪人更改为Redis可以解决我的问题!

如果您对丢失或未发送到RabbitMQ的邮件有困难,请尝试将您的代理更改为Redis。