教程示例:使用动态配置

本文通过一个示例介绍动态配置的业务编码和日志排查。

准备工作

动态配置的示例是基于 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 在 setbefore/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”。