您的位置:首页 > 娱乐 > 八卦 > 单位网址怎么编_小饭店普通装修_建立网站的流程_在百度如何发布作品

单位网址怎么编_小饭店普通装修_建立网站的流程_在百度如何发布作品

2025/1/6 16:08:02 来源:https://blog.csdn.net/LuoZheng4698729/article/details/144735578  浏览:    关键词:单位网址怎么编_小饭店普通装修_建立网站的流程_在百度如何发布作品
单位网址怎么编_小饭店普通装修_建立网站的流程_在百度如何发布作品

本人阅读了 Skywalking 的大部分核心代码,也了解了相关的文献,对此深有感悟,特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式,看本书时一定要跟着敲代码。

作者已经将过程写成一部书籍,奈何没有钱发表,如果您知道渠道可以联系本人。一定重谢。

本书涉及到的核心技术与思想

JavaAgent , ByteBuddy,SPI服务,类加载器的命名空间,增强JDK类,kafka,插件思想,切面,链路栈等等。实际上远不止这么多,差不多贯通了整个java体系。

适用人群

自己公司要实现自己的调用链的;写架构的;深入java编程的;阅读Skywalking源码的;

版权

本书是作者呕心沥血亲自编写的代码,不经同意切勿拿出去商用,否则会追究其责任。

原版PDF+源码请见:

本章涉及到的工具类也在这里面:

PDF书籍《手写调用链监控APM系统-Java版》第1章 开篇介绍-CSDN博客

第10章 插件与链路的结合:SpringBoot环境插件获取应用名

由于我们上报给kafka的数据中serviceName为空,所以制作了springboot的环境插件,用来填充serviceName。

要想获取到springboot的环境配置,需要拦截的信息如下:

类名:org.springframework.boot.SpringApplication

方法:prepareEnvironment

非JDK类库

下面来开发这个插件,要记住前面说的插件开发四部曲。在插件模块下新增app-enviroment-plugin项目,hadluo-apm-plugin.def内容如下:

app-names=com.hadluo.apm.enviroment.AppNamesInstrumentation

AppNamesInstrumentation代码如下:

public class AppNamesInstrumentation extends AbstractClassEnhancePluginDefine {@Overridepublic String enhanceClass() {return "org.springframework.boot.SpringApplication";}@Overridepublic MethodsInterceptPoint[] configMethodsInterceptPoint() {return new MethodsInterceptPoint[]{new MethodsInterceptPoint() {@Overridepublic ElementMatcher<MethodDescription> getMethodsMatcher() {// 拦截 prepareEnvironment 方法return ElementMatchers.named("prepareEnvironment");}@Overridepublic String getMethodsInterceptor() {// 拦截逻辑执行的拦截器return "com.hadluo.apm.enviroment.AppNamesInterceptor";}@Overridepublic boolean isOverrideArgs() {return false;}}};}
}

AppNamesInterceptor 代码如下:

public class AppNamesInterceptor implements InstanceMethodsAroundInterceptor {@Overridepublic Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class<?>[] argumentsTypes, Object ret) throws Throwable {ConfigurableEnvironment environment = (ConfigurableEnvironment) ret;Config.Agent.serviceName = environment.getProperty("spring.application.name");return ret;}
}

SpringApplication#prepareEnvironment这个方法结束后,就已经完成了配置文件等的解析存储,信息都是存储到返回值ConfigurableEnvironment 对象上面。我们直接获取就可以了,然后设置到我们的配置Config.Agent.serviceName里面 。

修改controller接口为一个空接口,主要是看serverName有没有获取到,打包测试:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com