全部产品
云市场

使用动态配置

更新时间:2019-10-18 18:13:50

在本教程中,您将通过一个示例了解动态配置的业务编码和日志排查。

前序课程

动态配置的示例是基于 SOFABoot 开发的。学习本课程前,确保您对 SOFABoot 有一定程度的了解。

下载示例代码

点击此链接 下载示例工程,动态配置项目示例代码位于 middleware-v2/dynamic-configuration-tutorial 文件夹下。

课程结构

  1. 云端管控:示例资源的录入
  2. 发布应用:示例代码下载,服务器部署运行
  3. 推送资源:管控端资源属性值操作
  4. 查看运行结果:结合日志确认操作结果
  5. 代码解析

云端管控

参考 快速开始 云端管控动态配置类。

发布应用

参考 发布应用 把应用部署到云端。

应用成功发布之后,您可以在动态配置控制台的资源查询页面查看运行代码的 ECS 和这些 ECS 内存中的属性值。

推送资源

可在动态配置属性详情页输入需修改的值,然后推送配置,此配置会被及时推送至关联此配置的客户端,并修改客户端对应的动态配置属性值。

推送

推送配置后,可实时查看对此配置有关联的客户端与客户端中此属性的内存值。

查看运行结果

通过网页端 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”。