为什么 rabbitmq 在队列目录中生成大量 idx 文件
why rabbitmq generate lots of idx file in queue directory
我使用 docker 设置了一个 RabbitMQ 服务器,如下所示。然后配置芹菜以将其用作代理。
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=mypass
ports:
- "5673:5672"
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- .:/app
links:
- rabbit
depends_on:
- rabbit
而芹菜配置是:
from __future__ import absolute_import
from celery import Celery
app = Celery('test_celery',broker='amqp://admin:mypass@host:5673',backend='rpc://',include=['test_celery.tasks'])
Run_tasks代码:
from .tasks import longtime_add
import time
if __name__ == '__main__':
url = ['http://example1.com' , 'http://example2.com' , 'http://example3.com' , 'http://example4.com' , 'http://example5.com' , 'http://example6.com' , 'http://example7.com' , 'http://example8.com'] # change them to your ur list.
for i in url:
result = longtime_add.delay(i)
print 'Task result:',result.result
任务代码
from __future__ import absolute_import
from test_celery.celery import app
import time,requests
from pymongo import MongoClient
client = MongoClient('10.1.1.234', 27018) # change the ip and port to your mongo database's
db = client.mongodb_test
collection = db.celery_test
post = db.test
@app.task(bind=True,default_retry_delay=10) # set a retry delay, 10 equal to 10s
def longtime_add(self,i):
try:
r = requests.get(i)
if some conditions happend:
longtime_add.delay(i)
elif some other conditions happened:
post.insert({'status':r.status_code,"creat_time":time.time()})
except Exception as exc:
raise self.retry(exc=exc)
run_taks 代码会生成一个 url 的列表并将它们发送到 RabbitMQ,然后任务将使用它们,并检查某些条件是否发生,如果发生再次将结果发送给 Rabbtmq ,否则将数据存入数据库。
这里的问题。当任务运行长时间,24小时甚至更长时间时,RabbitMQ会在目录"mnesia/rabbit@rabbit/queues"中生成大量的idx文件。总大小为40G。
那么这里的问题是,如何停止自动生成这些大文件或保持较小的文件大小?
.idx 文件是队列索引段。让您的应用程序使用排队的消息和 acknowledge them,然后将更新队列索引并在不再需要时删除它们的段文件。
当然,您也可以清除或删除队列。
我使用 docker 设置了一个 RabbitMQ 服务器,如下所示。然后配置芹菜以将其用作代理。
rabbit:
hostname: rabbit
image: rabbitmq:latest
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=mypass
ports:
- "5673:5672"
worker:
build:
context: .
dockerfile: dockerfile
volumes:
- .:/app
links:
- rabbit
depends_on:
- rabbit
而芹菜配置是:
from __future__ import absolute_import
from celery import Celery
app = Celery('test_celery',broker='amqp://admin:mypass@host:5673',backend='rpc://',include=['test_celery.tasks'])
Run_tasks代码:
from .tasks import longtime_add
import time
if __name__ == '__main__':
url = ['http://example1.com' , 'http://example2.com' , 'http://example3.com' , 'http://example4.com' , 'http://example5.com' , 'http://example6.com' , 'http://example7.com' , 'http://example8.com'] # change them to your ur list.
for i in url:
result = longtime_add.delay(i)
print 'Task result:',result.result
任务代码
from __future__ import absolute_import
from test_celery.celery import app
import time,requests
from pymongo import MongoClient
client = MongoClient('10.1.1.234', 27018) # change the ip and port to your mongo database's
db = client.mongodb_test
collection = db.celery_test
post = db.test
@app.task(bind=True,default_retry_delay=10) # set a retry delay, 10 equal to 10s
def longtime_add(self,i):
try:
r = requests.get(i)
if some conditions happend:
longtime_add.delay(i)
elif some other conditions happened:
post.insert({'status':r.status_code,"creat_time":time.time()})
except Exception as exc:
raise self.retry(exc=exc)
run_taks 代码会生成一个 url 的列表并将它们发送到 RabbitMQ,然后任务将使用它们,并检查某些条件是否发生,如果发生再次将结果发送给 Rabbtmq ,否则将数据存入数据库。
这里的问题。当任务运行长时间,24小时甚至更长时间时,RabbitMQ会在目录"mnesia/rabbit@rabbit/queues"中生成大量的idx文件。总大小为40G。
那么这里的问题是,如何停止自动生成这些大文件或保持较小的文件大小?
.idx 文件是队列索引段。让您的应用程序使用排队的消息和 acknowledge them,然后将更新队列索引并在不再需要时删除它们的段文件。
当然,您也可以清除或删除队列。