操作场景
本文介绍使用双写双消费方案,将旧的 RabbitMQ 集群的业务切换到腾讯云 RabbitMQ 集群的操作步骤。
前提条件
1. 已购买腾讯云 RabbitMQ 集群。
2. 已将旧 RabbitMQ 集群元数据迁移到腾讯云 RabbitMQ 集群。
操作步骤
1. 为新 RabbitMQ 集群添加新的消费者,准备消费新 RabbitMQ 集群的消息。
2. 为新 RabbitMQ 集群添加新的生产者,将生产流量逐步灰度切换到新集群,下线旧 RabbitMQ 集群的生产者,旧的消费者继续消费旧 RabbitMQ 集群中的消息。为了防止消息的重复或丢失,可以事先做好消息消费的幂等逻辑。
Tips 1:在旧集群的 RabbitMQ 社区管控台,确认自建集群的生产流量已经停止。

Tips 2:在旧集群的 RabbitMQ 社区管控台上,确认自建 RabbitMQ 集群的堆积消息在下降。

3. 检查原 RabbitMQ 集群是否有堆积的消息没有消费,确认旧的消费者消费完旧 RabbitMQ 集群的全部消息后,下线旧的消费者和旧 RabbitMQ 集群。完成整个数据流的迁移操作。
Tips:确认云上 RabbitMQ 集群的消息写入和消费,并确保消息无堆积。


注意:
如您没有按照上述顺序进行切换,如先切换生产者再切换消费者,可能导致消息丢失的情况。
切换剩余消费者之前,请确保原 RabbitMQ 集群中的消息已全部消费完,否则可能会导致消费遗漏。
可能存在的问题
顺序问题
由于集群切换,切换过程中,消息顺序问题无法保证,切换的过程中会导致局部乱序。
消息重复
理论上不会重复,极端情况下会发生,例如切换过程中,消费者消费了消息,但是还未给服务端(原 RabbitMQ 集群)ACK,这时会导致该消息进入重试队列导致重复消费。对消息做幂等处理逻辑可以规避这个问题。
消费延迟
读切换过程中,由于分区重新分配,需要进行队列和消费者客户端间的 rebalance,可能导致短暂的消费延迟现象。遇到该情况无需额外操作,切换完成后即可恢复。