码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 从零开始带你上手体验Sermant自定义插件开发


    本文对Sermant的自定义插件开发的流程进行了体验和探索,包括项目编译、运行、动态配置验证、插件拦截原理等内容,希望对初次体验Sermant高效开发插件的开发者有所帮助。
    合集 - 云原生(31)
    1.Kurator V0.6.0:实现应用全流程生命周期管理02-012.亿级月活游戏《迷你世界》全栈容器化实践分享02-213.华为云云原生专家入选全球顶级开源组织CNCF技术监督委员会03-054.基于Sermant的全链路灰度发布在汽车行业DMS系统的应用04-035.华为云云原生FinOps解决方案,释放云原生最大价值04-296.CCE云原生混部场景下的测试案例05-077.通过HPA+CronHPA组合应对业务复杂弹性伸缩场景05-178.Kmesh进入CNCF云原生全景图,实现网格治理sidecarless化05-219.云原生多云多集群Karmada|2024开源之夏8项课题邀您共创05-2210.KubeEdge v1.17.0发布!数据处理能力与易用性全面提升05-2311.Volcano社区新版本发布!7大功能全面增强队列能力与调度稳定性05-2412.干货收藏!Calico的BGP RouteReflector策略实践05-2913.破除软件开发困局,基于容器平台的DevOps转型实践06-0314.跨越云端,华为云技术专家分享高效跨云迁移实践06-0615.技术解读华为云CCE Autopilot,k8s集群托管免运维06-1316.硬核解读KubeEdge基于大模型边云协同的机器人语义分割算法06-1717.揭秘10亿+高并发应用如何实现高效稳定的开发和运维06-1818.Karmada v1.10发布,新增多集群声明式负载重平衡06-1919.华为云技术专家硬核分享,云原生中间件如何加速业务发展07-02
    20.从零开始带你上手体验Sermant自定义插件开发07-03
    21.以Java项目为例,实现Jenkins对接CCE Autopilot集群07-0322.从安装到配置,教你用Argo CD对接CCE集群完成测试、生产部署07-0523.ELB Ingress网关助力云原生应用轻松管理流量07-0924.硬核案例分享,一文带你拆解PHP语言体系下的容器化改造07-0925.华为云DTSE助力虎彩鲜檬优化运维效率,助力迁移上云07-1526.一文教你在华为云上部署Discuz论坛网站07-1527.蓝亚盒子迁移上云,华为云助力开启元宇宙直播电商新纪元07-1728.华为云DTSE助力悦知技术架构升级、打破业务瓶颈07-1829.革新技术架构,华为云DTSE助力紫藤科技迁移上云经验分享07-1930.华为云Serverless可观测性解决方案打造高效、可靠的云原生应用07-2531.从K8s的“临时容器”看K8s设计的厉害之处07-26
    收起

    本文分享自华为云社区《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

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

     

  • 相关阅读:
    java毕业设计房屋租赁平台mybatis+源码+调试部署+系统+数据库+lw
    Socket编程,客户端与服务端是如何通信的
    Java基于SpringBoot的旅游网站的设计与实现论文
    论文解读:SlowFast Networks for Video Recognition
    AI全栈大模型工程师(十五)记忆封装:Memory
    微服务实战系列之Gateway
    【Linux】常见指令以及权限理解(入门必知)(学习复习兼顾)
    R语言—矩阵
    使用element-ui中的el-table回显已选中数据时toggleRowSelection报错
    HDRP(SRP) 渲染一个摄像机剔除遮罩外的物体
  • 原文地址:https://www.cnblogs.com/huaweiyun/p/18280895
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号