美文网首页
APIGateway中使用Dubbo泛化调用

APIGateway中使用Dubbo泛化调用

作者: 加大装益达 | 来源:发表于2020-08-11 18:05 被阅读0次

APIGateway需要调用各个业务系统的接口,但是不可能作为消费者依赖所有系统的接口jar包,可以使用Dubbo的泛化调用功能来实现。APIGateway作为消费者,连接到注册中心,拿到相应接口后可以使用泛化调用。

泛化调用比较简单,可以直接参考dubbo官方文档:Dubbo的泛化调用

示例代码:

public class GenericInvokeDubbo {

    public final static String PROTOCOL = "zookeeper";

    public final static String REGISTRY_ADDRESS = "127.0.0.1:2181";

    public final static String APP_NAME = "app-name";

    private Map<String, ReferenceConfig> referenceConfigMap = new ConcurrentHashMap<String, ReferenceConfig>();

    public Object invokeService(String interfaceClass, String method, String[] paramTypes, Object[] params) {
        ReferenceConfigCache cache = null;
        ReferenceConfig<GenericService> referenceConfig = null;
        try {
            referenceConfig = referenceConfigMap.get(interfaceClass);
            if (referenceConfig == null) {
                referenceConfig = new ReferenceConfig<>();

                ApplicationConfig application = new ApplicationConfig();
                application.setName(APP_NAME);
                referenceConfig.setApplication(application);

                RegistryConfig registry = new RegistryConfig();
                registry.setProtocol(PROTOCOL);
                registry.setAddress(REGISTRY_ADDRESS);
                referenceConfig.setRegistry(registry);

                ConsumerConfig consumerConfig = new ConsumerConfig();
                consumerConfig.setTimeout(5000);
                consumerConfig.setRetries(0);
                referenceConfig.setConsumer(consumerConfig);

                referenceConfig.setGeneric(true);
                // referenceConfig.setVersion();
                referenceConfig.setInterface(interfaceClass);
                referenceConfigMap.put(interfaceClass, referenceConfig);
            }
            cache = ReferenceConfigCache.getCache();
            GenericService genericService = cache.get(referenceConfig);
            return genericService.$invoke(method, paramTypes, params);
        } catch (IllegalStateException e) {
            referenceConfigMap.remove(interfaceClass);
            if (cache != null) {
                cache.destroy(referenceConfig);
            }

            e.printStackTrace();
            return null;
        }
        catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

源码:https://github.com/dachengxi/APIGateway
原文链接:https://cxis.me/2020/04/09/APIGatewat%E4%B8%AD%E4%BD%BF%E7%94%A8Dubbo%E6%B3%9B%E5%8C%96%E8%B0%83%E7%94%A8/

相关文章

  • APIGateway中使用Dubbo泛化调用

    APIGateway需要调用各个业务系统的接口,但是不可能作为消费者依赖所有系统的接口jar包,可以使用Dubbo...

  • 记一次Dubbo的异常处理

    Dubbo的异常处理 最近项目中在使用到泛化的网关处理。这里分享一下,在调用的过程中,Dubbo对异常的处理。 官...

  • dubbo泛化调用

    为什么要使用泛化调用? 一般使用dubbo,provider端需要暴露出接口和方法,consumer端要十分明确服...

  • dubbo泛化调用

    为什么要使用泛化调用? 一般使用dubbo,provider端需要暴露出接口和方法,consumer端要十分明确服...

  • Dubbo泛化调用

    泛化调用示例: 原理:泛化调用本质是在filter过滤链上执行的序列化和反序列化操作消费者端对应的过滤器是Gene...

  • 十四、soul源码学习-dubbo请求泛化调用

    这一节我们来讲一下dubbo请求的泛化调用。 dubbo请求到网关后,会进入到ApacheDubboPlugin中...

  • Dubbo 泛化引用和泛化实现

    开篇  在Dubbo官方文档中关于泛化调用和泛化实现的说明,这里针对文档的案例做一些简单的说明和解释。 例子 例子...

  • dubbo泛化调用指南

    在如今的各种大型分布式系统中,dubbo框架已成为一颗明星。而作为内部rpc,它无法承担对外输出的功能,此...

  • Dubbo-泛化调用-泛型

    背景 今天刚好有需求需要用到dubbo的泛化调用,涉及到了泛型问题:服务端无法获取泛型对象的数据,特此记录。 解决...

  • dubbo Serialized class org.apach

    在使用dubbo实现远程调用的过程中,出现了这个错误,原因是,dubbo远程调用的参数类都必须实现序列化。在项目中...

网友评论

      本文标题:APIGateway中使用Dubbo泛化调用

      本文链接:https://www.haomeiwen.com/subject/hnaqdktx.html