如何使用TTL设置Celery,以清除队列中的旧消息?

Dav*_*vid 2 django rabbitmq celery django-celery

我正在使用Celery,Django和RabbitMQ。我正在寻找一种自动从RabbitMQ的celery队列中清除旧邮件的方法。因此,无论何时默认情况下创建队列,都应清除所有早于x秒的消息。

这些是我在settings.py中设置的变量。

CELERY_DEFAULT_EXCHANGE = 'celery'
CELERY_DEFAULT_EXCHANGE_TYPE = 'topic'
CELERY_DEFAULT_ROUTING_KEY = 'celery'
CELERY_DEFAULT_QUEUE = 'celery'
CELERY_EVENT_QUEUE_TTL= 30
Run Code Online (Sandbox Code Playgroud)

我也尝试过这样做,但是导致没有消息发送到RabbitMQ。

CELERY_QUEUES = (                                                                                                                                                                 
Queue('celery', routing_key='celery', queue_arguments={'x-message-ttl': 30}),                                                                                                 
Queue('default', routing_key='default', queue_arguments={'x-message-ttl': 30}),                                                                                               
)
Run Code Online (Sandbox Code Playgroud)

任何想法都欢迎。

Sam*_*lin 5

X-消息TTL在毫秒 - 不被秒

您想在celery配置文件中放入以下内容:

from kombu import Exchange, Queue

CELERY_QUEUES = [
                     Queue(
                         'celery',
                         Exchange('celery'),
                         routing_key = 'celery',
                         queue_arguments = {
                                                'x-message-ttl': 30000
                                           }
                     )
                ]
Run Code Online (Sandbox Code Playgroud)