Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
还原RabbitMQ中备份的排队消息不起作用_Rabbitmq - Fatal编程技术网

还原RabbitMQ中备份的排队消息不起作用

还原RabbitMQ中备份的排队消息不起作用,rabbitmq,Rabbitmq,根据以下职位: 通过执行以下步骤,可以备份然后恢复持久队列消息: 要备份,我们必须: 1-停止rabbitmq服务器: #rabbitmqctl停止应用程序 2-复制(tar)文件夹“/var/lib/rabbitmq/mnesia/”: #tar-cvf mnesia.tar/var/lib/rabbitmq/mnesia/ 3-启动rabbitmq服务器: #rabbitmqctl启动应用程序 然后要恢复它们,我们必须: 1-停止rabbitmq服务器: #rabbitmqctl停止应用

根据以下职位:

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

要备份,我们必须:

1-停止rabbitmq服务器:
#rabbitmqctl停止应用程序

2-复制(tar)文件夹“/var/lib/rabbitmq/mnesia/”:
#tar-cvf mnesia.tar/var/lib/rabbitmq/mnesia/

3-启动rabbitmq服务器:
#rabbitmqctl启动应用程序

然后要恢复它们,我们必须:

1-停止rabbitmq服务器:
#rabbitmqctl停止应用程序

2-复制回(untar)文件夹“/var/lib/rabbitmq/mnesia/”:
#tar-xvf mnesia.tar-C/

3-启动rabbitmq服务器:
#rabbitmqctl启动应用程序

但当尝试在rabbitmq群集或甚至在单个节点上应用这些步骤时,无法还原任何消息。

我们还注意到: /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg\u store\u transient 似乎存储排队消息的位置, 总是在rabbitmq服务器重新启动后进行清理(停止应用程序并启动应用程序)。 然后尝试在启动rabbitmq后复制备份的tar,以不清除文件夹/msg\u store\u, 但这也没有帮助(在web管理控制台中没有恢复消息的迹象)

我们正在虚拟机上执行测试,包括: Ubuntu-14.04, Erlang-R16B03, RabbitMQ-3.4.1, 并使用java客户端创建的持久队列

非常感谢您提供帮助或提示,以正确恢复排队消息,尤其是在rabbitmq服务器出现故障后。

需要持久性 已发布的消息应标记为持久消息-通过提供值为2的delivery_mode属性。看

在Java客户端中,我们可以如下设置:

AMQP.BasicProperties basicProperties = new AMQP.BasicProperties().builder().deliveryMode(2).build();

Channel channel = initializeChannel(...);

channel.basicPublish(exchange, rootinKey, basicProperties, message body in bytes);
存储位置 已发布的消息存储在

/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_persistent
目录,而不是

/var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_transient
以及记忆的内容/rabbit@rabbitmq-重新启动rabbitmq后,未清理node1/msg_store_persistent**

还发现,在重新启动单个节点或所有集群节点后,所有标记为持久的消息都可用

单节点配置的恢复 对于仅备份了/var/lib/rabbitmq/mnesia的单节点rabbitmq配置,恢复备份的消息也能正常工作/rabbit@rabbitmq-node1dir,这很好,足以恢复队列及其所有消息,之后,您可以使用rabbitmq管理器web控制台删除队列及其内容

恢复群集配置和更改的节点名称 但在多个节点组成的集群中,在从所有集群节点删除队列后,无法恢复备份的消息

作为一种解决方法,我们尝试将备份从群集恢复到具有相同节点名称的单节点rabbitmq服务器(在我的示例中,节点名称为rabbit@rabbitmq-节点1)并通过执行以下步骤成功:

  • 添加与备份队列同名的持久队列 向上,这将在中创建相同的目录(具有相同的代码名) **记忆\rabbit@rabbitmq-node1\queues**目录

  • 停止rabbitmq并仅替换来自的以下目录 备份:

    /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg\u store\u persistent

    /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-节点1/队列

  • 启动rabbitmq,如果队列消息未出现在 查看管理web控制台的概述,然后重新启动服务器 使用:

    \\\etc/init.d/rabbitmq-server重启


  • 对于我来说,这可以将特定队列的排队消息从集群恢复(IOW迁移)到单节点rabbitmq服务器。

    这可以在3.7.3版上使用。复制后,我必须设置文件的权限,因为它们来自Windows框。chown-R rabbitmq:rabbitmq/var/lib/rabbitmq chmod-R 777/var/lib/rabbitmq/mnesia