当RabbitMQ停止时,芹菜丢失了消息

时间:2017-04-04 05:55:06

标签: python rabbitmq celery

我使用简单的应用来验证我遇到的问题。

我的任务add将一些字符串附加到文本文件中。

当RabbitMQ运行时,我从执行send_task('add', ('my message',))的ipython shell中实现了这个附加功能。

然后我手动停止RabbitMQ并在同一个ipython会话中执行send_task('add', ('a new message',))。执行此操作时不会发生任何异常。

'一个新的消息' 从未入队过,也没有注意到这一点。 在随后的send_task调用中,引发OperationalError: [Errno 104] Connection reset by peer,我使用try/except正确处理。

我怎样才能避免这个"第一条消息"当兔子离线时丢失了?

提前致谢。

此处有一段视频在行动中显示此问题! https://www.youtube.com/watch?v=WmAYBkVJk7Q

tasks.py

from celery import Celery

app = Celery('tasks', broker='amqp://dev:dev@127.0.0.1/')

@app.task
def add(algo):
    print('Writing "{}" to file'.format(algo))
    open('/tmp/pepe.txt', 'a').write('{}\n'.format(algo))

ipython shell (刚刚停止使用rabbitmq后)

In [1]: from celery import Celery

In [2]: cel = Celery('tasks', broker='amqp://dev:dev@127.0.0.1/')

In [3]: cel.send_task('tasks.add', ('my message 23',))
Out[3]: <AsyncResult: a2167d23-3190-480b-bdb0-96dd1c98b08c>

0 个答案:

没有答案