本文将引导您如何在本地客户端配置单元化,发布与引用 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)"
}
]