HarmonyOS 鸿蒙Next 从零开始带你上手体验Sermant自定义插件开发

发布于 1周前 作者 wuwangju 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:从零开始带你上手体验Sermant自定义插件开发

摘要:本文对Sermant的自定义插件开发的流程进行了体验和探索,包括项目编译、运行、动态配置验证、插件拦截原理等内容,希望对初次体验Sermant高效开发插件的开发者有所帮助。

本文分享自华为云社区《Sermant自定义插件开发上手体验》,作者:华为云开源。

一、研究缘由

由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件, 为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。

下面我们就Sermant-example中的first-plugin-demo来进行研究说明。

二、下载Sermant-example

首先我们下载sermant-example的demo:

cke_126.png

下载完成之后,我们从最简单的自定义插件开始,也即first-plugin-demo。

三、执行打包

对first-plugin-demo执行打包,打完包的结构:

cke_127.png

可以看到我们的项目和对应的插件模板项目都在里面了。

四、启动项目

java -javaagent:sermant-agent.jar -jar Application.jar 

然后访问controller方法

cke_128.png

从而可以看到拦截的效果:

cke_129.png

可以看到启动的过程中,完成了拦截的效果。

也即它走了拦截器的前置和后置方法。

 cke_130.png

五、动态配置验证

cke_131.png

配置的动态配置里面配置的配置中心是zookeeper,因此我们在启动项目前需要启动一个zookeeper作为配置中心,同时开启动态配置开关。

完成之后,我们需要在相应的监听节点下创建一个配置项,来测试动态配置的功能:

cke_132.png

再次进行访问,可以在控制台看到如下效果:

cke_133.png

也即完成了动态配置的功能。而我们可以看到

cke_134.png

其实质是创建了配置监听器,实现了配置处理的process方法,其中DynamicConfigEvent就是监听到的配置更改的事件,包含了配置的group,key,content等配置信息。实现动态配置的相关实现是调用了自己实现的process方法,基于map对配置进行存储和处理,从而实现配置切换。

六、全流程中的参数argsMap到底是什么

之前一直很好奇配置里面的信息到底是什么,最近debug之后有所发现。

我们可以看到加载的argMap里面的相关参数:

cke_135.png

我们可以看到argsMap里面的参数基本上和上面的配置,同时会加载插件里面的配置信息。完成这些操作之后,就可以在全流程中去完成对应信息的加载了。

ConfigManager.initialize(argsMap) ,主要是解析一些配置,由于配置存在yaml和properties等不同的形式,因此这里采用策略模式来进行解析。主要的相关配置信息可以参考BaseConfig这个接口的实现。

七、插件的加载是在plugins.yaml

插件的加载是在plugins.yaml里面配置的,比如我们自定义的插件:

cke_136.png

而实现插件的关键在于plugins.yaml中配置了哪些插件。因为这些插件正是后续进行拦截的基础。也即它告诉了程序,需要加载哪些插件,不需要加载哪些插件。有了这个基础,才会进行后面精准的转换、installOn操作。

八、拦截原理

我们可以看到上面控制台打印的拦截信息,那如何实现拦截的呢?

可以看到我们执行first-plugin-demo这个示例的时候:会发现我们执行业务方法的时候,它就会进行织入拦截器,执行对应的onMethodEnter和方法执行完后的onMethodExit方法。

cke_137.png

这两个方法和byte-buddy中的使用实现的功能是类似的。在需要拦截的方法中执行织入的逻辑。

同时可以从控制台debug中的信息可以看到调用的情况:

cke_138.png

完成上面的调用之后,我们便可以看到控制台输出的信息了。

这里我们以进入方法为例,来进行说明:

cke_139.png

可以看到进入对应的织入方法之后,最终会走到我们需要进行扩展的迭代器中,来实现迭代。

 cke_140.png

可以看到进入了first-plugin-demo中的插件拦截:

 cke_141.png

完成拦截进入到业务方法中,实现拦截功能的织入。然后进入后置拦截,完成after的拦截逻辑。

参考:

官网:https://sermant.io

仓库地址:https://github.com/sermant-io/Sermant

Demo仓库:https://github.com/sermant-io/Sermant-examples

点击关注,第一时间了解华为云新鲜技术~

2 回复

HarmonyOS 鸿蒙Next为开发者提供了强大的自定义插件开发能力,以下是关于Sermant自定义插件开发的基础指导:

Sermant自定义插件开发是HarmonyOS鸿蒙Next中的一个重要功能,它允许开发者根据自己的业务需求,创建具有特定功能的插件。在开发前,请确保已熟悉HarmonyOS的基础开发环境,包括ArkUI开发框架、ArkTS语言等。

开发Sermant自定义插件时,需要遵循鸿蒙的开发规范,利用提供的API和工具进行编码。开发者可以创建自定义的UI组件、逻辑处理模块等,以满足特定的应用需求。

在插件开发过程中,可能会遇到各种技术挑战,如UI渲染异常、组件通信问题等。为解决这些问题,建议详细阅读鸿蒙的官方文档,了解相关API的使用方法和注意事项。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。希望这些信息能帮助你顺利上手Sermant自定义插件开发。

回到顶部