使用dubbo admin启动与管理
环境使用nacos server: 2.5.0;dubbo admin: develop分支;dubbo admin githubnpm: 11.3.0;IntelliJ IDEA 2025.1; Apache Maven 3.9.0; Java version:…
Read More环境使用nacos server: 2.5.0;dubbo admin: develop分支;dubbo admin githubnpm: 11.3.0;IntelliJ IDEA 2025.1; Apache Maven 3.9.0; Java version:…
Read More前言 通过调试可以观察到dubbo中spi拓展生成的对象都有$Adaptive的后缀,例如protocol的spi实例化对象为: 下面来看看这个代理对象是如何生成的:首先我们获取spi的代理对象可以通过ExtensionLoader中的两个方法getExtension和getAdaptiveExtension来获取,这两者的区别是: – getExtension 方法用于获取指定名称的扩展点实现类实例; – getAdaptiveExtension 方法用于获取一个自适应的扩展点实例。这个实例会根据运行时的参数动态地选择具体的扩展点实现类;1. 在代码中,使用getExtensionLoader(type)首先会获取到对应类型的spi接口的ExtensionLoader实例,如果不存在则创建,并进行缓存存放到ExtensionLoader类的extensionLoadersMap成员变量中。创建对应类型的ExtensionLoader很简单,使用map的putIfAbsent方法,将new出来的ExtensionLoader放入缓存map中:extensionLoadersMap.putIfAbsent(type, new ExtensionLoader(type, this, scopeModel));2. 然后调用创建出来的ExtensionLoader的getAdaptiveExtension方法获取自适应的实例。创建的流程是首先动态生成自适应的spi类的java代码,即图中的code变量;然后对动态生成的代码进行编译Compile生成Class对象。有了Class对象之后,即可通过反射创建实例对象。…
Read More消费者端接口引用 从消费者端来进行分析,定义消费者的接口的时候可以定义返回ReferenceBean的@Bean: @Bean@DubboReference(group = "demo", filter = "-mytest,refFilter1")public ReferenceBean<DemoService> referenceBean() { HashMap<String, Object> props =…
Read More