本文通过一个示例介绍动态配置的业务编码和日志排查。
准备工作
动态配置的示例是基于 SOFABoot 开发的。学习本课程前,确保您对 SOFABoot 有一定程度的了解。
已搭建 SOFABoot 基础环境。操作步骤,请参见 搭建环境。
如果您在线下有联调环境,想在本地编译调试,需要了解 SOFABoot 项目如何编译运行。详情请参见 本地运行。
如果您需要在服务器上部署示例代码,请参见 云端发布。
下载 动态配置的示例工程。
步骤 1:云端管控
录入示例代码,配置云端管控动态配置类。详情请参见 动态配置快速入门。
步骤 2:发布应用
操作步骤,请参见 云端发布。
应用成功发布之后,您可以在动态配置控制台的资源查询页面查看运行代码的 ECS 和这些 ECS 内存中的属性值。
步骤 3:推送资源
在动态配置属性详情页输入需修改的值,然后推送配置。此配置会被及时推送至关心此配置的客户端,并修改客户端对应的动态配置属性值。操作步骤,请参见 推送动态配置。
推送配置后,可实时查看对此配置感兴趣的客户端与客户端中此属性的内存值。
查看运行结果
您可以通过 SSH 工具登录到应用的 ECS,查看客户端日志和业务日志:
动态配置客户端启动日志
日志目录: /home/admin/drm/drm-boot.log
。
如果没有异常日志,表明动态配置客户端启动正常。
根据资源的 ID 进行查找,如示例中的资源 ID 为
com.antcloud.tutorial.configuration.DynamicConfig
,就可以通过grep com.antcloud.tutorial.configuration.DynamicConfig drm-boot.log
看到这个资源注册的相关日志。
动态配置推送日志
如果客户端启动正常,在推送资源后,您可以在动态配置的推送日志 /home/admin/drm/drm-monitor.log
中查找如下信息:
“
Receive update command from zdrmdata server
”表示从服务端收到了更新资源的命令。“
Query data from zdrmdata
”表示客户端到服务端查询并更新了最新的推送值。
业务日志
在代码中,我们还通过 Logger 在 set
和 before/update
中打印了自己的业务日志,根据 log4j 中的路径,业务日志会打印在 /home/admin/logs/service/default.log
中。
代码解析
DynamicConfig
是一个动态配置类,具有以下特点:
是一个普通的 Java 类,符合 Java Bean 的规范。
它的属性均具有
get/set
方法(没有会导致资源注册失败),例如代码中的str
,称为资源属性。资源属性只允许String
和基本类型。资源类上加上注解
@DObject
(包名为com.alipay.drm.client.api.annotation
),属性需要加上@DAttribute
注解。@BeforeUpdate
和@AfterUpdate
在每个属性更新前或更新后执行统一的操作,例如打印日志。这两个方法是可选的,只适合做一些非业务主流程的逻辑。业务逻辑需要放在属性的
set
方法中执行。注意如果业务逻辑执行耗时很长,最好能够异步处理,避免超时后动态客户端报错 “
interrupt
”。