栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

dubbo 直连解决方案

Java 更新时间:发布时间: 百科书网 趣学号
要做什么

看dubbo官网后发现有dubbo直连这种方式,简化了我们开发环境的流程,不再需要启动注册中心。于是想要应用到自己项目中去。
但是各类网站看了很多dubbo直连的案例,基本都和官网一致,一个一个service 指定 url,这样的方式不太符合我们自己项目,我想要的是所有的service 使用 dubbo://127.0.0.1:20880 url

dubbo版本:2.7.8

源码过程分析

这里先创建的一个又Spring 管理的Controller, 其中只有一个属性且被Reference 注解标识,然后我们看一下这个实力注入流程:
一、 扫描到Controller 类进行实例化
二、 populate 属性注入
在这一步 扫描到Reference注解标识的属性,开始生成代理对象

org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor#doGetInjectedBean
// 进行一系列解析,不过多赘述
调用referenceBean.get()

执行 org.apache.dubbo.config.ReferenceConfig#init
org.apache.dubbo.config.ReferenceConfig#checkAndUpdateSubConfigs
org.apache.dubbo.config.ReferenceConfigbase#resolveFile  // 这个地方解析了dubbo文件 中配置的url

org.apache.dubbo.config.ReferenceConfig#postProcessConfig // 这里是一个可扩展点,如何扩展往下面看
//方法源码
private void postProcessConfig() {
        List configPostProcessors = ExtensionLoader.getExtensionLoader(ConfigPostProcessor.class)
                .getActivateExtension(URL.valueOf("configPostProcessor://"), (String[]) null);
        configPostProcessors.forEach(component -> component.postProcessReferConfig(this));
} 

ConfigPostProcessor 接口点进去发现是一个spi扩展接口
虽然官网没写这个接口如何扩展,我们可以仿造其他的spi扩展 以及自己debug

首先 实现ConfigPostProcessor 接口可以设置ReferenceConfig 的属性,后面会将其属性加入到一个map,之后利用map创建代理类(也在init方法中, 创建赋值给ref,前面的referenceBean.get() 返回的就是ref)

最开始的想法:
利用filter,每次调用前 切换invoker中的url,不太好设置
利用spring 的扩展,bpp 等方法,判断其中的不是reference的属性,进行修改

实际coding

基于ConfigPostProcessor 接口进行spi扩展

@Activate(group = {CommonConstants.CONSUMER})
public class DubboRedirectConfigPostProcessor implements ConfigPostProcessor {

    public static final String DUBBO_URL = "dubbo://127.0.0.1:20880";

    
    public void postProcessReferConfig(ReferenceConfig referenceConfig) {
    	// referenceConfig 在这是 org.apache.dubbo.config.spring.ReferenceBean
        referenceConfig.setUrl(DUBBO_URL);
    }
}

在meta-INF.dubbo下创建com.alibaba.dubbo.config.ConfigPostProcessor 的文件,
写入你的全路径实现类dubboDirect=com.config.DubboDirectConfigPostProcessor

如果你上述步骤没有问题,
configPostProcessors 就成功加入了你的实现类, 可以再postProcessReferConfig 方法中实现更多的扩展

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/275216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号