IT评测·应用市场-qidao123.com
标题:
从零开始带你上手体验Sermant自定义插件开发
[打印本页]
作者:
大号在练葵花宝典
时间:
2024-7-3 07:15
标题:
从零开始带你上手体验Sermant自定义插件开发
本文分享自华为云社区
《Sermant自定义插件开发上手体验》
,作者:华为云开源。
一、研究缘由
由于现在我们所处的行业是汽车行业,项目上进行云服务的迁徙时使用到了
Sermant
中的相关插件, 为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。
下面我们就Sermant-example中的first-plugin-demo来进行研究说明。
二、下载Sermant-example
首先我们下载sermant-example的demo:
下载完成之后,我们从最简单的自定义插件开始,也即first-plugin-demo。
三、执行打包
对first-plugin-demo执行打包,打完包的结构:
可以看到我们的项目和对应的插件模板项目都在内里了。
四、启动项目
java -javaagent:sermant-agent.jar -jar Application.jar
复制代码
然后访问controller方法
从而可以看到拦截的效果:
可以看到启动的过程中,完成了拦截的效果。
也即它走了拦截器的前置和后置方法。
五、动态设置验证
设置的动态设置内里设置的设置中心是zookeeper,因此我们在启动项现在需要启动一个zookeeper作为设置中心,同时开启动态设置开关。
完成之后,我们需要在相应的监听节点下创建一个设置项,来测试动态设置的功能:
再次进行访问,可以在控制台看到如下效果:
也即完成了动态设置的功能。而我们可以看到
实在质是创建了设置监听器,实现了设置处理的process方法,此中DynamicConfigEvent就是监听到的设置更改的事件,包罗了设置的group,key,content等设置信息。实现动态设置的相关实现是调用了自己实现的process方法,基于map对设置进行存储和处理,从而实现设置切换。
六、全流程中的参数argsMap到底是什么
之前不停很好奇设置内里的信息到底是什么,最近debug之后有所发现。
我们可以看到加载的argMap内里的相关参数:
我们可以看到argsMap内里的参数根本上和上面的设置,同时会加载插件内里的设置信息。完成这些操作之后,就可以在全流程中去完成对应信息的加载了。
ConfigManager.initialize(argsMap) ,主要是解析一些设置,由于设置存在yaml和properties等不同的形式,因此这里采用计谋模式来进行解析。主要的相关设置信息可以参考BaseConfig这个接口的实现。
七、插件的加载是在plugins.yaml
插件的加载是在plugins.yaml内里设置的,好比我们自定义的插件:
而实现插件的关键在于plugins.yaml中设置了哪些插件。因为这些插件正是后续进行拦截的基础。也即它告诉了程序,需要加载哪些插件,不需要加载哪些插件。有了这个基础,才会进行背面精准的转换、installOn操作。
八、拦截原理
我们可以看到上面控制台打印的拦截信息,那如何实现拦截的呢?
可以看到我们执行first-plugin-demo这个示例的时间:会发现我们执行业务方法的时间,它就会进行织入拦截器,执行对应的onMethodEnter和方法执行完后的onMethodExit方法。
这两个方法和byte-buddy中的使用实现的功能是雷同的。在需要拦截的方法中执行织入的逻辑。
同时可以从控制台debug中的信息可以看到调用的情况:
完成上面的调用之后,我们便可以看到控制台输出的信息了。
这里我们以进入方法为例,来进行说明:
可以看到进入对应的织入方法之后,终极会走到我们需要进行扩展的迭代器中,来实现迭代。
可以看到进入了first-plugin-demo中的插件拦截:
完成拦截进入到业务方法中,实现拦截功能的织入。然后进入后置拦截,完成after的拦截逻辑。
参考:
官网:
https://sermant.io
仓库地址:
https://github.com/sermant-io/Sermant
Demo仓库:
https://github.com/sermant-io/Sermant-examples
点击关注,第一时间了解华为云新鲜技术~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4