单元化配置

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

说明

该功能仅适用于开启了单元化能力的用户。

升级依赖

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

<parent>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>sofaboot-enterprise-dependencies</artifactId>
    <version>3.3.0</version>
</parent>

应用参数配置

在本地项目的全局配置文件 application.properties 中,配置以下参数:

  • 配置 AntVIP、instanceid、AccessKey ID、AccessKey Secret。配置说明,请参见 引入 SOFA 中间件

  • 配置 Zone 信息,示例如下:

    com.alipay.ldc.zone=LCD-Test-A-1
    com.alipay.ldc.datacenter=LCD-Test-A
    //开启严格模式的 LDC。
    com.alipay.ldc.strictmode=true
    zmode=true
    //需要确保您配置的 zonemng-pool 能 ping 通。
    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

[
    {
        "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)"
    }
]

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

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

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

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