更新时间:2024-04-01 GMT+08:00

RabbitMQ业务迁移

应用场景

RabbitMQ业务迁移主要涉及到以下两个场景:

  • 将线下单机或集群实例迁移到线上RabbitMQ实例。
  • 将低版本的RabbitMQ实例迁移到高版本的RabbitMQ实例,例如将3.7.17版本的RabbitMQ实例迁移到3.8.35版本的RabbitMQ实例。

迁移原理

在实际业务场景中,RabbitMQ实例存在多个生产者和消费者,在业务迁移时,不会迁移数据,只是通过逐个增加/关闭消费者、生产者的方式迁移实例,这种迁移方式可以实现业务无感迁移。

迁移准备

在云上创建目标RabbitMQ实例,具体请参考购买实例

实施步骤(双读模式迁移实例)

  1. 将原RabbitMQ实例的元数据迁移到目标RabbitMQ实例。

    图1 迁移元数据

    迁移步骤如下:

    1. 登录原RabbitMQ的WebUI页面,在“Overview”页签中,单击“Download broker definitions”,导出元数据。
      图2 导出元数据
    2. 登录目标RabbitMQ的WebUI页面,在“Overview”页签中,单击“选择文件”,选择1.a中导出的元数据,单击“Upload broker definitions”,上传元数据。
      图3 导入元数据

  2. 为目标RabbitMQ实例添加新的消费者,准备消费目标实例的消息。

    图4 添加新消费者

  3. 为目标RabbitMQ实例添加新的生产者,下线原RabbitMQ实例的生产者,旧的消费者继续消费原RabbitMQ实例中的消息。

    图5 迁移生产者

  4. 旧的消费者消费完原RabbitMQ实例的全部消息后,下线旧的消费者和原RabbitMQ实例。

    图6 下线旧的消费者和原RabbitMQ实例

迁移后检查

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

  • 在RabbitMQ WebUI页面查看,如图7所示。

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

    图7 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时,说明消费完成。

    图8 回显信息