我们最近在使用RabbitMQ时遇到了一个问题:当服务器的硬盘驱动器已满时,RabbitMQ的虚拟主机已损坏,无法使用。
再次使RabbitMQ功能正常的唯一方法是删除并重新创建损坏的主机。
这样,我们所有的队列和交换以及其中的数据都消失了。
虽然这种情况不应在生产中发生,但我们正在寻找一种方法来防止数据丢失(如果确实发生了这种事件。
我们一直在查看官方的rabbitMQ文档以及堆栈交换,但是尚未找到任何解决方案来防止主机损坏时防止数据丢失。
我们计划在开发的后期阶段建立集群,这至少应有助于减少虚拟主机损坏时的数据丢失,但目前尚不可能。
是否有任何可靠的方法可以防止虚拟主机损坏,或在不丢失数据的情况下修复虚拟主机?
对此有一些想法(无特定顺序):
RabbitMQ具有多个high-availability configurations-依靠单个节点无法防止数据丢失。
通常,您可以通过一条消息获得两个可能的保证之一,但不能同时拥有两个:
应通过专用于此目的的工具来主动监视节点的总体运行状况(即磁盘空间,处理器使用情况,内存等)。耗尽关键系统资源永远不会令您感到惊讶。
如果您正在运行一个节点,并且该节点的磁盘空间不足,并且上面有一堆消息,并且您担心数据丢失,想知道RabbitMQ如何为您提供帮助,我会说您将您的优先事项混在一起。
RabbitMQ不是数据库。它不能在不确定的时间内可靠地存储消息。请不要指望它。