gpt4 book ai didi

rabbitmq - 在 RabbitMQ 中恢复已备份的排队消息不起作用

转载 作者:行者123 更新时间:2023-12-01 10:45:22 28 4
gpt4 key购买 nike

根据以下帖子:

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- stop the rabbitmq server: # rabbitmqctl stop_app

2- copy (tar) the folder "/var/lib/rabbitmq/mnesia/": # tar -cvf mnesia.tar /var/lib/rabbitmq/mnesia/

3- start the rabbitmq server: # rabbitmqctl start_app



然后到 恢复 他们我们必须:

1- stop the rabbitmq server: # rabbitmqctl stop_app

2- copy back (untar) the folder "/var/lib/rabbitmq/mnesia/": # tar -xvf mnesia.tar -C /

3- start the rabbitmq server: # rabbitmqctl start_app



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

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

我们正在使用以下虚拟机执行测试:
Ubuntu-14.04,
二郎-R16B03,
RabbitMQ-3.4.1,

并与 持久队列 由 java 客户端创建。

将不胜感激任何帮助或提示以正确恢复排队的消息,尤其是在 rabbitmq 服务器出现故障之后。

最佳答案

需要持久性

发布的消息应该被标记为持久的——通过提供一个值为 2 的 delivery_mode 属性。见 https://www.rabbitmq.com/tutorials/tutorial-two-python.html

在 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

并且rabbitmq重启后mnesia/rabbit@rabbitmq-node1/msg_store_persistent**的内容没有被清理干净。

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

还原单节点配置

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

恢复集群配置和更改的节点名称

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

作为一种解决方法,尝试将备份从集群恢复到具有相同节点名称的单节点 rabbitmq 服务器(在我的情况下,节点名称是 rabbit@rabbitmq-node1 )并通过执行以下步骤成功:
  • 添加一个与支持的队列同名的持久队列
    起来,这应该创建相同的目录(具有相同的代号)
    **mnesia\rabbit@rabbitmq-node1\queues** 目录。
  • 停止rabbitmq并仅替换以下目录
    备份:

    /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/msg_store_persistent

    /var/lib/rabbitmq/mnesia/rabbit@rabbitmq-node1/queues
  • 启动rabbitmq,如果队列消息没有出现在
    管理 Web 控制台的概述,然后重新启动服务器
    使用:
    \# /etc/init.d/rabbitmq-server restart

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

    关于rabbitmq - 在 RabbitMQ 中恢复已备份的排队消息不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108899/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com