全部产品

单元化配置(仅专有云)

更新时间:2020-04-01 10:42:28

本文将引导您如何在本地客户端配置单元化,发布与引用 RPC 服务。

说明:该功能仅适用于专有云开启了单元化能力的用户。

升级依赖

您需要将 SOFABoot 版本升级到 3.3.0 或以上,详见 SOFABoot 版本说明

  1. <parent>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>sofaboot-enterprise-dependencies</artifactId>
  4. <version>3.3.0</version>
  5. </parent>

应用参数配置

  1. 在本地项目的全局配置文件 application.properties 中,正确配置 antvip、instanceid、AK、SK,详见 引入 SOFA 中间件 > 添加全局配置项
  2. 在部署的时候,还需要传入以下参数:
    1. com.alipay.ldc.zone=LCD-Test-A-1
    2. com.alipay.ldc.datacenter=LCD-Test-A
    3. //表示开启严格模式的LDC
    4. com.alipay.ldc.strictmode=true
    5. zmode=true
    6. //需要确保您的 zonemng-pool 能 ping 通。
    7. zonemng_zone_url=http://zonemng-pool

服务发布

服务发布,如果您没有特殊要求,跟随部署的 zone 进行发布即可。

  • 如在 RZone 部署,则服务就发布在 RZone。
  • 部署在 CZone,服务就发布在 CZone。
  • 如果两个 zone 都部署,那么都发布。

默认情况下,服务全 zone 发布,如果您需要指定在某些 zone 发布,则配置如下 DRM 动态配置即可。

  • 资源:com.alipay.sofa.rpc.ldc.route.drm.config
  • 字段:publishConfig
  • 内容:[{"serviceName":"interface:1.0:uniqueId","cell":"RZ,CZ"}]

比如,您当前的 zone 是 RZ00A,则通过上面的DRM 提前配置,您的服务会在 RZ00A 发布出来,而如果您的 Zone 名是 TZ00A,则不会发布。

配置好之后,进行应用重启,即可看到效果。目前暂不支持运行中动态变更该信息。一旦修改,必须重启生效。

服务引用

目前,一旦配置了 com.alipay.ldc.strictmode=true(严格模式),则路由的时候,要求入参的第一个参数必须为 userId 路由信息。RPC 框架计算出倒数二三位进行路由。如果不是,则会认为没有 LDC 逻辑,走本 Zone 优先。

如果在某些情况下,您认为以上的默认规则不足,也支持更高级的用法(支持方法维度):

  • 资源:com.alipay.sofa.rpc.ldc.route.drm.config
  • 字段:routeConfig

如下所示,先匹配方法,然后匹配接口。会根据第一个参数的第二三位进行计算,例如对于 123,则计算为 23

  1. [{"serviceName":"interface:1.0:uniqueId","rule":"string.substring(args[0], 1, 3)"},{"serviceName":"interface:1.0:uniqueId:methodA","rule":"string.substring(args[0], 1, 3)"}]

如果是复杂对象,需要使用如下配置:

  1. [{"serviceName":"interface:1.0:uniqueId","rule":"string.substring(#args.[0].uid, 1, 3)"}]

如是简单对象,也可以使用如下配置:

  1. [{"serviceName":"interface:1.0:uniqueId","rule":"string.substring(#args.[0], 1, 3)"}]