当虚拟主机损坏时保持队列和交流

时间:2019-11-12 13:33:25

标签: rabbitmq vhosts

我们最近在使用RabbitMQ时遇到了一个问题:当服务器的硬盘驱动器已满时,RabbitMQ的虚拟主机已损坏,无法使用。

使RabbitMQ再次起作用的唯一方法是删除并重新创建损坏的主机。

这样做,我们所有的队列,交换以及其中的数据都消失了。

虽然这种情况不应在生产中发生,但我们正在寻找一种方法来防止数据丢失(如果确实发生了这种情况)。

我们一直在查看官方的RabbitMQ文档以及堆栈交换,但是还没有找到防止主机损坏时防止数据丢失的解决方案。

我们计划在开发的后期阶段建立集群,这至少应有助于减少虚拟主机损坏时的数据丢失,但目前尚不可能。

是否有任何可靠的方法来防止虚拟主机损坏或在不丢失数据的情况下修复虚拟主机?

1 个答案:

答案 0 :(得分:0)

对此有一些想法(不分先后):

  1. RabbitMQ具有多个{{3}}-依靠单个节点无法防止数据丢失。

  2. 通常,您可以通过一条消息获得两种可能的保证之一,但不能同时拥有两种:

    • 至少发送一次-消息将至少发送一次,甚至可能更多。
    • 最多一次传递-消息可能会也可能不会传递,但是如果传递,则永远不会再次传递
  3. 应该使用专用于此目的的工具来主动监视节点的总体运行状况(即磁盘空间,处理器使用情况,内存等)。耗尽关键系统资源永远不会令您感到惊讶。

  4. 如果您正在运行一个节点,并且该节点的磁盘空间不足,并且上面有一堆消息,并且您担心数据丢失,想知道RabbitMQ如何为您提供帮助,说你把自己的优先事项混在一起了。

  5. RabbitMQ不是数据库。它不能在不确定的时间内可靠地存储消息。请不要指望它。