【问题标题】:Is there a way to rescue the queue after RabbitMQ crashed?RabbitMQ 崩溃后有没有办法挽救队列?
【发布时间】:2019-07-31 04:20:41
【问题描述】:

当一些测试完成时,RabbitMQ 崩溃了。出于统计原因,需要崩溃时队列中剩余的数据包数。在/var/lib/rabbitmq/mnesia/rabbit@VM_16_11_centos/queues/5PHK4O2BWQQNR6JA7K2PX8355下发现有一堆.idx文件和一个空的journal.jif(当时只有一个队列在运行,所以这个文件夹是唯一的选择)

有没有办法用这些文件拯救队列?

附:为防止删除其他文件,保留 RabbitMQ 以防止擦除其他必要的二进制文件。

【问题讨论】:

  • 备份该目录,然后重新启动 RabbitMQ。您的消息应该仍然存在。

标签: linux centos rabbitmq queue


【解决方案1】:

我发现这个工具可以读取 RabbitMQ IDX 文件和持久存储 RDQ 文件。然后,我能够一次将一条消息重新导入 RabbitMQ,并让我的消费者正常处理数据。

https://github.com/jeffbryner/rdqdump

对于未来的预防措施:

可以将队列/交换标记为持久,以便重新创建它并在任何类型的服务器故障、崩溃或代理重新启动时幸存下来。 (持久实体可以在服务器重新启动后继续存在,通过在服务器恢复后自动重新创建。)

将队列标记为 Durable 并不意味着队列中的消息也会被重新创建。

为此,可以将消息标记为持久。 (持久消息将在到达队列后立即写入磁盘,并且只有在从持久队列中消耗(并确认)后才会被标记为垃圾回收。)

【讨论】: