我正在使用Celery,Django和RabbitMQ。我正在寻找一种方法来自动清除RabbitMQ中芹菜队列中的旧消息。因此,无论何时默认情况下创建队列,它都应该清除所有早于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
我也尝试了这个,但它导致了根本没有消息被发送到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}),
)
欢迎任何想法。
答案 0 :(得分:4)
x-message-ttl 毫秒 - NOT SECONDS 。
你想在你的芹菜配置文件中添加这样的东西:
from kombu import Exchange, Queue
CELERY_QUEUES = [
Queue(
'celery',
Exchange('celery'),
routing_key = 'celery',
queue_arguments = {
'x-message-ttl': 30000
}
)
]
答案 1 :(得分:1)
选项CELERY_EVENT_QUEUE_TTL = 30仅适用于事件,而不适用于名称所述的任务。只要有必要,芹菜就会为任务保留信息,这是有道理的。
在我的情况下,我使用RabbitMQ Federation将队列加倍。切换到铲子为我解决了这个问题。