使用Docker进行RabbitMQ内存管理



我正在使用RabbitMQ管理docker映像。问题是在大约1周的正常运行时间后,磁盘空间和内存几乎耗尽。我需要再次终止并重新启动它才能正常工作,但这样做会丢失队列中所有现有的消息。

我用来启动rabbitmq服务器的命令是:docker run --rm -it --hostname my-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

我使用的是持久消息和持久队列。

否。排队的人数将在70人左右。

每秒连接数可能在5到100 之间变化

我使用amqplib npm模块使用Nodejs与RabbitMQ交互。

我做错什么了吗?或者,如果使用docker映像,我应该直接在任何服务器上进行配置吗?有没有办法只删除acknowledged消息?

提前谢谢。

这是根据rabbitmq官方文件对耐久性的定义

耐久性

队列可以是持久的,也可以是暂时的。持久队列的元数据存储在磁盘上,而临时队列的元数据尽可能存储在内存中。在某些协议(例如AMQP 0-9-1和MQTT(中,在发布时对消息进行了相同的区分。

在持久性很重要的环境和用例中,应用程序必须使用持久队列,并确保发布将已发布的消息标记为持久化

因此,如果您在消息部分使用耐久性,则意味着您正在将它们存储到存储器中。rabbitmq提供了一个可以确认消息的功能如果确认消息,它将从队列中删除。所以ack有两个选项:

  1. 使用自动确认模式{noAck:true}

    channel.cump(队列,函数(msg({//信息本身就在这里!}{noAck:true});

  2. ack manualiy:

    channel.cump(队列,函数(msg({//信息本身就在这里!//我可以手动确认channel.ack(消息(;}{noAck:false});

因此有一篇关于优化rabbitmq:https://www.cloudamqp.com/blog/2018-01-08-part2-rabbitmq-best-practice-for-high-performance.html

相关内容

  • 没有找到相关文章

最新更新