RabbitMQ迁移指将生产与消费消息的客户端切换成连接新RabbitMQ,部分还涉及将持久化的消息文件迁移到新的RabbitMQ。提供以下2种方案:
方案一:不迁移数据,先切换生产,再切换消费。
方案二:先迁移数据,然后同时切换生产和消费。
方案一:不迁移数据,先切换生产,再切换消费
针对线下单机或集群实例,在不迁移数据的情况下,首先将消息生产切换到线上实例,不再生产消息到线下实例,消费方同时消费线下以及线上实例。当线下实例消息全部消费完后,将消息消费切换到线上实例,完成整个迁移过程。
说明
该方案无法保障消息消费的有序性。
确保客户端与线上实例可连通。
通过以下方法,确认线下实例是否消费完成:
- 在RabbitMQ WebUI页面查看,如图1所示。
Overview视图中,可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明消费完成。
图1 RabbitMQ WebUI
- 调用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时,说明消费完成。
图2 回显信息
方案二:先迁移数据,再然后同时切换生产和消费
在线下实例和线上实例都开启shovel插件,线上实例开启的方法请参见开启shovel插件。然后,在线下实例的RabbitMQ WebUI页面中配置shovel插件信息:Source为线下实例信息,Destination为线上实例信息,并在Source和Destination中设置需要同步的队列。
图3 配置shovel插件信息
shovel插件信息配置完成后,生成如下shovel规则:
图4 生成shovel规则
当shovel状态为“running”时,表示迁移开始。等数据迁移完成后,将生产、消费切换至线上实例,完成迁移过程。
图5 shovel完成状态
说明
shovel迁移数据的原理是消费线下实例消息,生产消息到线上实例,迁移后线下实例消息 被清空,建议离线迁移,业务会出现中断。
确保线上实例和线下实例可连通。
通过以下方法,确认数据是否迁移完成。
- 在RabbitMQ WebUI页面查看,如图6所示。
Overview视图中,线下实例中可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明迁移完成。
图6 RabbitMQ WebUI
针对于具体的队列数据,可以进队列页面查看。
图7 迁移后线下实例队列数据
图8 迁移后线上实例队列数据
- 调用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时,说明迁移完成。
图9 回显信息