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时,说明迁移完成。
图 回显信息