如何让RabbitMQ更可靠?是否可以定期备份其数据(消息)?

时间:2016-02-17 04:50:06

标签: linux rabbitmq backup reliability

我想确保在RabbitMQ崩溃的情况下不会丢失。有可能以某种方式使用RabbitMQ转储或备份它在磁盘上的所有队列吗?

我也听说过,一旦收到消息,即使它崩溃了,当它出现时,消息将可用。

那么您建议如何使该过程更可靠?

2 个答案:

答案 0 :(得分:2)

在RabbitMQ中,可以使用队列和消息的持久性来实现。 队列持久性意味着其配置将存储在磁盘上。当RabbitMQ在崩溃后恢复时,队列将被恢复。因此可以这样做:

/**
 * Validate the size of an array.
 *
 * @param mixed $attribute
 * @param mixed $value
 * @param array $parameters
 */ 
public function validateArraySize($attribute, $value, $parameters)
{
    $data = array_get($this->data, $attribute);

    if(!is_array($data)){
        return true;
    }

    $validateSize = count($data) <= $parameters[0];

    return $validateSize;
}

您所寻求的与消息持久性更密切相关。将delivery_mode标志设置为2发布所有消息。默认值为1,这使得消息仅驻留在RAM中。有关Python中的代码示例,请参阅this。摘录如下。

channel.queue_declare(queue='myQueue', durable=True)

请注意,启用邮件持久性会影响性能。设置为2时,RabbitMQ代理必须执行其他工作 向磁盘写入消息并从磁盘读取消息。

答案 1 :(得分:0)

最好的方法是创建RabbitMQ cluster,然后配置HA policies

配置HA时,邮件将复制到其他节点。 如果一个节点崩溃,您可以访问其他节点。

您还可以备份通常包含配置和消息的Mnesia目录,但某些消息可以保留在缓存中。 确保你应该停止rabbitmq应用程序。

我尝试使用HA。

另一种连续备份消息的方法是使用Shovel插件

如@Milind所述,使用持久性消息是最佳做法。

修改

您使用Tx Transaction云请在此处阅读: https://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

Tx可以解决您的问题,但会对性能产生重大影响。