RabbitMQ业务迁移

2022-04-19 13:59:38

RabbitMQ迁移指将生产与消费消息的客户端切换成连接新RabbitMQ,部分还涉及将持久化的消息文件迁移到新的RabbitMQ。提供以下2种方案

§ 方案一:不迁移数据,先切换生产,再切换消费

§ 方案二:先迁移数据,然后同时切换生产和消费。

方案一:不迁移数据,先切换生产,再切换消费

针对线下单机或集群实例,在不迁移数据的情况下,首先将消息生产切换到线上实例,不再生产消息到线下实例,消费方同时消费线下以及线上实例。当线下实例消息全部消费完后,将消息消费切换到线上实例,完成整个迁移过程。

须知:

    该方案无法保障消息消费的有序性。

    确保客户端与线上实例可连通。

通过以下方法,确认线下实例是否消费完成:

    1、在RabbitMQ WebUI页面查看,如图所示。

Overview视图中,可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明消费完成。

RabbitMQ WebUI

 

2、调用API查看。

curl -s -u username:password -XGET http://ip:port/api/overview

参数说明:

    username:线下实例登录RabbitMQ WebUI的帐号

    password:线下实例登录RabbitMQ WebUI的密码

    ip:线下实例登录RabbitMQ WebUI的IP地址

    port:线下实例登录RabbitMQ WebUI的端口号

回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明消费完成。

回显信息

 

方案:先迁移数据,再然后同时切换生产和消费

在线下实例和线上实例都开启shovel插件,线上实例开启的方法请参见开启shovel插件。然后,在线下实例的RabbitMQ WebUI页面中配置shovel插件信息:Source为线下实例信息,Destination为线上实例信息,并在Source和Destination中设置需要同步的队列。

配置shovel插件信息

shovel插件信息配置完成后,生成如下shovel规则:

 

 

shovel状态为“running”时,表示迁移开始。等数据迁移完成后,将生产、消费切换至线上实例,完成迁移过程。

 

须知:

    shovel迁移数据的原理是消费线下实例消息,生产消息到线上实例,迁移后线下实例消息 被清空,建议离线迁移,业务会出现中断。

    确保线上实例和线下实例可连通。

通过以下方法,确认数据是否迁移完成。

1、RabbitMQ WebUI页面查看,如下图所示。

Overview视图中,线下实例中可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明迁移完成。

RabbitMQ WebUI

针对于具体的队列数据,可以进队列页面查看。

迁移后线下实例队列数据

 

6 迁移后线上实例队列数据

2、调用API查看。

curl -s -u username:password -XGET http://ip:port/api/overview

参数说明:

username:线下实例登录RabbitMQ WebUI的帐号

password:线下实例登录RabbitMQ WebUI的密码

ip:线下实例登录RabbitMQ WebUI的IP地址

port:线下实例登录RabbitMQ WebUI的端口号

回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明迁移完成。

回显信息