APIGateway中使用Dubbo泛化调用

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;
        }
    }
}

原文 

http://cxis.me/2020/04/09/APIGatewat中使用Dubbo泛化调用/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » APIGateway中使用Dubbo泛化调用

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址