我一直在使用 Celery 并阅读有关 rabbitmq vs redis 的消息代理和后端 . 我想使用 rabbitmq 后端,因为它听起来更好地保证数据不会丢失 .

我问了这个问题(rabbitmq queues filling up with celery tasks),关于 rabbitmq 队列填满 mnesia 文件夹中的随机GUID . 另一位用户向我指出了这个类似的问题(Queues with random GUID being generated in RabbitMQ server) . 他们提到我不应该使用 rabbitmq 作为我的后端,只使用消息代理 .

我想整合我的堆栈,只使用 rabbitmq 作为消息代理和后端 . 有没有办法防止队列因内存过载而慢慢填满并最终导致应用程序被杀?

使用 CELERY_AMQP_TASK_RESULT_EXPIRES 似乎没有解决问题 .

我想并行运行一些硬件调用 . 这是芹菜任务:

@app.task
def call_plc(sitename, ip_address):
    vals = pc.PLC_Comm().connect_to(sitename, ip_address)
    return vals

我创建了一堆这些任务并将它们放在一个列表中 . 一旦 all([t.ready() for t in task_list] 返回 True ,我继续前进 .

另一项任务只是发送电子邮件:

@app.task
def send_asyncalarm(sitename, alarm_list, timestamp):
    my_an = an.Alarm_Notifier()
    my_an.send_alarm(sitename, alarm_list, timestamp)
    return

我可能在将来确认电子邮件已发送,但现在它是“火与忘记”