论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
ToB圈子
›
虚拟化.容器.超融合.云计算
›
云计算圈
›
从零开始带你上手体验Sermant自定义插件开发 ...
从零开始带你上手体验Sermant自定义插件开发
大号在练葵花宝典
金牌会员
|
2024-7-3 07:15:13
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
788
|
帖子
788
|
积分
2364
本文分享自华为云社区
《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企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
发新帖
回复
大号在练葵花宝典
金牌会员
这个人很懒什么都没写!
楼主热帖
鸿蒙系统架构分析
记一次MySql唯一索引在left join连表查 ...
国产开源体系openEuler_24.03_LTS摆设 ...
2021年高教杯数学建模国赛C题的解题过 ...
【大话云原生】微服务篇-五星级酒店的 ...
STM32F1与STM32CubeIDE编程实例-磁簧开 ...
渗透测试过程参考
GO实现Redis:GO实现内存数据库(3) ...
微服务和分布式系统中的授权解决方案 ...
Linux环境安装Redis7
标签云
挺好的
服务器
快速回复
返回顶部
返回列表