步骤3:开启双读写

最近更新时间:2024-06-14 17:42:31

我的收藏

操作场景

本文主要介绍使用双写双消费方案,将自建 RabbitMQ 集群的服务切换到 腾讯云消息队列 RabbitMQ 中的方法。

方案:双写双消费模式

前提条件

1. 已购买云上 RabbitMQ 实例
2. 已将自建 RabbitMQ 集群元数据迁移到腾讯云 RabbitMQ。

操作步骤

1. 切换消费者集群中部分节点的接入信息,将这部分消费者接入到新版 RabbitMQ 集群。切换的这部分消费者将消费新版 RabbitMQ 集群中的消息,剩余消费者继续消费原 RabbitMQ 集群中的消息。
2. 切换生产者集群中部分节点的接入信息,将这部分生产者接入到新版 RabbitMQ。切换的这部分生产者将发送消息到新版 RabbitMQ 集群中;剩余的生产者还是将消息发送到旧版 RabbitMQ 集群中。为了防止消息的重复或丢失,可以事先做好消息消费的幂等逻辑。
3. 将剩余的生产者全部接入到新的 RabbitMQ 集群上。此时所有消息将全部被发送到新版 RabbitMQ 集群中。
Tips 1:可以在自建集群的 RabbitMQ 社区管控台,确认自建集群的生产流量已经停止。
enter image description here


Tips 2:在自建集群的 RabbitMQ 社区管控台上,可以确认自建 RabbitMQ 集群的堆积消息在下降。
enter image description here


4. 检查原 RabbitMQ 集群是否有堆积的消息没有消费,确认原 RabbitMQ 集群没有堆积或者未处理的消息后,将剩余的消费者全部接入到新版 RabbitMQ 集群上。完成整个数据流的迁移操作。
Tips:确认云上 RabbitMQ 集群的消息写入和消费,并确保消息无堆积。
enter image description here


注意:
如您没有按照上述顺序进行切换,如先切换生产者再切换消费者,可能导致消息丢失的情况。
切换剩余消费者之前,请确保原 RabbitMQ 集群中的消息已全部消费完,否则可能会导致消费遗漏。

可能存在的问题

顺序问题

由于集群切换,切换过程中,消息顺序问题无法保证;切换的过程中会导致局部乱序。

消息重复

理论上不会重复,极端情况下会发生,例如切换过程中,消费者消费了消息,但是还未给服务端(原 RabbitMQ 集群)ACK,这时会导致该消息进入重试队列导致重复消费。对消息做幂等处理逻辑可以规避这个问题。

消费延迟

读切换过程中,由于分区重新分配,需要进行队列和消费者客户端间的 rebalance,可能导致短暂的消费延迟现象。遇到该情况无需额外操作,切换完成后即可恢复。