首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RabbitMQ中恢复已备份的队列消息不工作

在RabbitMQ中恢复已备份的队列消息不工作
EN

Stack Overflow用户
提问于 2014-11-24 15:58:09
回答 1查看 7.7K关注 0票数 5

根据下列员额:

http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-Backup-td18268.html

http://rabbitmq.1065348.n5.nabble.com/rabbitmq-server-Mnesia-backup-and-restore-td28598.html

通过执行以下步骤,可以备份并恢复持久排队消息:

备份,我们必须:

1- (狂犬病)服务器:# rabbitmqctl stop_app 2- (Tar)文件夹"/var/lib/rabbitmq/mnesia/":# tar -cvf mnesia.tar /var/lib/rabbitmq/mnesia/ 3- 启动(狂犬病)服务器:# rabbitmqctl start_app

然后,要还原,我们必须:

1- (狂犬病)服务器:# rabbitmqctl stop_app 2- 复制(untar)文件夹"/var/lib/rabbitmq/mnesia/":# tar -xvf mnesia.tar -C / 3- 启动(狂犬病)服务器:# rabbitmqctl start_app

,但当尝试将这些步骤应用于兔子or集群甚至单个节点时,无法恢复任何消息.

还注意到:/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_transient的内容似乎存储了排队的消息,总是在rabbitmq服务器重新启动后清除 (stop_app和start_app)。然后,在启动rabbitmq之后,尝试复制备份的tar,以避免清除/msg_store_transient文件夹,但这也没有帮助(IOW在web管理控制台中没有恢复消息的迹象)。

我们正在虚拟机上执行我们的测试:Ubuntu-14.04、Erlang-R16B03、RabbitMQ-3.4.1、以及java客户端创建的持久队列

将感谢任何帮助或提示来正确恢复排队的消息,特别是在rabbitmq服务器故障之后。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-04 09:31:08

持之以恒

发布的消息应该被标记为持久化--通过提供一个值为2的delivery_mode属性。

在Java客户机中,我们可以将其设置如下:

代码语言:javascript
复制
AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).build();

Channel channel = initializeChannel(...);

channel.basicPublish(exchange, rootinKey, basicProperties, message body in bytes);

存储位置

已发布的消息存储在

代码语言:javascript
复制
/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_persistent

目录,而不是

代码语言:javascript
复制
/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_transient

mnesia/rabbit@rabbitmq-node1/msg_store_persistent**含量在重新启动后仍未被清除。

还曾表示,在重新启动单个节点或所有集群节点后,标记为持久性的所有消息都是可用的。

单节点配置的还原

还原备份的消息也在单个节点rabbitmq配置中正常工作,因为它只备份了/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1 dir,该dir很好,足以用它的所有消息恢复队列,在使用rabbitmq管理器web控制台删除队列及其内容之后。

对群集配置和更改的节点名称进行还原

但是,在多个节点组成的集群中,在从所有群集节点删除队列后,无法恢复备份的消息。

作为解决办法,尝试将备份从集群还原到具有相同节点名称的单个节点rabbitmq服务器(在我的示例中,节点名为rabbit@rabbitmq-node1),并通过执行以下步骤成功完成:

  1. 添加一个与备份的队列同名的持久队列,这将在**mnesia\兔子@rabbitmq-node1\queues**目录中创建相同的目录(具有相同的代码名)。
  2. 停止rabbitmq并只替换备份中的下列目录: /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_persistent /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/queues
  3. 启动rabbitmq时,如果未将排队的消息显示在管理web控制台的概述中,则使用以下方法重新启动服务器: \# /etc/init.d/rabbitmq-server restart

这有助于我将特定队列的队列消息从集群恢复到单个节点rabbitmq服务器(IOW迁移)。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27108899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档