使用Message Broker进行数据库复制(目前是RabbitMQ)

时间:2014-02-10 13:17:39

标签: rabbitmq replication messaging messagebroker apache-kafka

当我的系统数据发生变化时,我将每一个更改发布到至少4个不同的消费者(每秒约3000条消息),所以我想使用消息代理。
大多数消费者负责通过更改来更新他们的数据库表。

(DB是不同的 - 沙发,mysql等,因此无法使用自己的复制机制或使用db触发器等解决方案) 问题

  1. 是否有人使用消息代理在DB之间进行数据复制? 这是一个好习惯吗?

  2. 如果发生故障,我该怎么办? 假设使用RabbitMQ,客户端在处理它们之前每次从队列中删除10,000条消息,确认并抛出异常。现在他们迷路了。有没有办法回到队列中?

    (重新排队会使他们的订单混乱)。

  3. 使用rabbitMQ是一个好习惯吗?是不是像Kafka一样重新回到队列中的能力对于失败场景很重要?

  4. 感谢。

1 个答案:

答案 0 :(得分:0)

我没有使用消息代理进行数据库复制的经验,但这可能有助于您走上正确的轨道:

  

2。如果发生故障,我该怎么办?

     

假设使用RabbitMQ,客户端从中移除了10,000条消息   每次处理之前,每次都会排队,确认并抛出异常。   现在他们迷路了。有没有办法回到队列中?

您可以使用dead lettering来避免丢失邮件。在您确定消费者已成功处理它们之前,我建议不要确认除非这是一项长期运行的任务。如果失败,basic.reject而不是basic.ack将它们发送到死信队列。你有一个中等吞吐量,所以要小心。

但是,订单无法保证。您需要实现一个手动机制来按照它们发布的顺序恢复它们,可能是通过使用带有某种时间戳或id机制的消息头来按正确的顺序重新处理它们。