多活容灾MSHA的异地消息多活功能依赖阿里云消息队列RocketMQ版(原名开放消息服务,简称ONS),通过跨实例间Topic双向同步,实现业务恢复和故障恢复解耦,保障故障场景下的业务连续性。本文介绍如何配置MQ。

背景信息

消息多活的基础是消息在单元间同步,并进一步按照消费的属性决定是单元化规则消费还是全量消费。

  • 消息同步规范
    • 只有配置了单元化的Topic消息才会同步。
    • 如果您在MSHA控制台配置了消息的单元化属性,则配置完成后,需要重启客户端。
    • 配置同步的消息,多地域的实例名称与Topic名称必须相同。您可以在消息队列RocketMQ版控制台中修改实例名称,修改名称不影响业务。
  • 消息消费规范
    • 单元化的SUB端,消费单元化Topic:按照单元化规则只消费本单元的消息,非本单元消息将直接丢弃。
    • 非单元化的SUB端,消费单元化Topic:不会按单元化规则过滤,能消费所有单元的消息。

      此类业务建议只部署在中心。

    • 单元化的Group名称必须相同。
    • 发生切流时,如果您的消息在原单元已处理,在新单元可能会重复收到,请您根据业务语义做好幂等处理。
    • MQ对消费进度的采集间隔为5分钟,即发生双活切流时MQ计算出来的消费位点最大为5分钟之前的位点,您的应用程序会重复消费5分钟的消息,切流时需要评估其影响。
    • 消息消费使用批量消费API接口时,DefaultMQPushConsumer的consumeMessageBatchMaxSize属性默认值为1,且不支持其它值。
说明
  • 分区顺序消息在单元内能够保持分区顺序性。但是,切流瞬间正在访问的用户的消息顺序性可能会短暂受到影响。
  • 全局顺序消息只在本单元内具有全局顺序性,在多个单元之间没有全局顺序性。
  • 在业务变更上线前,应遵循配置管理控制台 > 发布PUB端 > 发布SUB端的顺序。同时,需确认历史消息没有堆积。若有堆积,SUB端可能会因为消息非法而丢弃历史消息。

使用限制

  • 消息队列RocketMQ版控制台中创建实例时,仅企业铂金版实例支持异地多活功能,标准版实例不支持。
  • 需使用ons-client客户端才具备异地双活消息过滤功能。
    说明 使用ons-client客户端时,您需通过Maven方式引入以下依赖。
    <dependency> 
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>ons-client</artifactId> 
        <version>${1.8.8或更高版本}</version>
    </dependency>
    更多详细信息,请参见消息队列RocketMQ版商业化SDK文档

前提条件

已在消息队列RocketMQ版控制台中完成实例、Topic和Group的创建,详细操作请参见创建资源
说明
  • 您需要创建两个实例,每个实例下再分别创建一个Topic和一个Group,并且保证两个实例下的Topic名称以及Group ID均保持一致。
  • 创建的两个实例可以是相同地域也可以是跨地域。

操作步骤

  1. 登录AHAS控制台
  2. 在控制台左侧导航栏中选择多活容灾
  3. 在左侧导航栏选择异地双活 > MQ配置
  4. 导入Topic资源。
    1. Topic单元化页签中,单击导入
    2. 导入页面中选择实例信息,并选择要导入的Topic资源信息,然后单击确认
      Topic单元化

      导入完成后,在列表中展示已导入的Topic资源。

  5. 同步Topic。
    1. 在目标Topic所在行操作列,单击同步
    2. 在弹出的预检页面中,单击确认
      同步成功后,Topic的是否单元化栏显示为运行状态更新为同步中同步Topic
      同时,还可以查看Topic单元化的整体情况。Topic单元化总览
  6. 可选:在目标Topic右侧操作栏按需还可以进行以下配置。
    • 单击刷新可刷新同步概况。
    • 单击取消可取消Topic同步。
    • 单击删除可取消已导入的Topic。
  7. 导入Group资源。
    1. 在异地MQ配置页面中选择Group单元化页签,并在Group单元化页面中单击导入
    2. 导入页面中选择单元信息,并选择要导入的Group资源信息,然后单机确认
      导入Group资源

      导入完成后,在列表中展示已导入的Group资源。

  8. 生效Group单元化。
    1. 在目标Group所在行操作列,单击生效
    2. 在弹出的预检页面中,单击确认
      生效成功后,Group的是否单元化栏更新为生效Group资源
      同时,还可以查看Group单元化的整体情况。Group单元化总览
  9. 可选:在目标Group右侧操作栏按需还可以进行以下配置。
    • 单击取消可取消已生效的Group。
    • 单击删除可取消已导入的Group。
    • 单击详情可查看Group消费位点详情。Group消费位点详情