dubbo泛化调用的原理(使用泛化方式调用dubbo)

技术如何通过API方式使用dubbo泛化调用这篇文章主要介绍“如何通过API方式使用dubbo泛化调用”,在日常操作中,相信很多人在如何通过API方式使用dubbo泛化调用问题上存在疑惑,小编查阅了各式资料,整理出简单好

本文主要介绍“如何通过API使用dubbo广义调用”。在日常操作中,相信很多人对于如何通过API使用dubbo广义调用都有疑问。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“如何通过API使用dubbo广义调用”的疑惑!接下来,请和边肖一起学习!

泛化是啥?

官网说明:通用接口调用方法主要用于客户端没有API接口和模型类元素的时候。参数和返回值中的所有POJO都用Map表示,Map通常用于框架集成,例如实现一个通用的服务测试框架,可以通过GenericService调用所有的服务实现。

我跑去问组长,那天他们对泛化怎么说?我们应该用什么场景?

一般化意味着你不知道你不关心底层实现,你只需要在接口和参数上达成一致,实现由底层实现。然而,这样一来,可扩展性和可用性都非常低。为什么不约定一个接口,提供商在ZK注册,消费者去ZK拉,或者干脆提供一个jar包,然后通过普通注册调用?

至于场景,因为暂时访问的第三方数据服务不能直接调用,我们在他们之间提供了一个接口,他们实现了。

00-1010在Spring配置中声明泛型=“真”:

Dubo:引用ID=' barService '接口=' com.foo.barservice '泛型=' true '/在Java代码中获取barService并启动一般化调用:

generic service bar service=(generic service)application context . getbean(' bar service ');

对象结果=barService。$invoke('sayHello ',new String[]{ ' Java . lang . String ' },new Object[]

通过 Spring 使用泛化调用

import org . Apache . dubbo . RPC . service . generic ServiCe;

.

//引用远程服务

//这个例子很重。它封装了与注册表和服务提供者的所有连接。请缓存它。

ReferenceConfigGenericService reference=new ReferenceConfigGenericService();

//弱类型接口名称

reference . setinterface(' com . XXX . xxxservice ');

reference . setversion(' 1 . 0 . 0 ');

//声明为通用接口

reference . setgeneric(true);

//所有接口引用都可以用org . Apache . dubbo . RPC . service . generic service替换。

generic service generic service=reference . get();

//基本类型、日期、列表、地图等。无需转换即可直接调用。

对象结果=genericService。$invoke('sayHello ',new String[]{ ' Java . lang . String ' },new Object[]{ ' world ' });

POJO参数由Map表示。如果返回值是POJO,将自动转换为Map。

MapString,Object person=new HashMapString,Object();

person.put('name ',' XXX ');

person.put('password ',' yyy ');

//如果返回POJO,将自动转换为Map。

对象结果=genericService。$invoke('findPerson ',新字符串[]

{'com.xxx.Person'},新对象[]{ person });

.泛化的实现

通过 API 方式使用泛化调用

.

/>// 用org.apache.dubbo.rpc.service.GenericService可以替代所有接口实现
GenericService xxxService = new XxxGenericService();

// 该实例很重量,里面封装了所有与注册中心及服务提供方连接,请缓存
ServiceConfig<GenericService> service = new ServiceConfig<GenericService>();
// 弱类型接口名
service.setInterface("com.xxx.XxxService");
service.setVersion("1.0.0");
// 指向一个通用服务实现
service.setRef(xxxService);

// 暴露及注册服务
service.export();

注册到ZK实现

public static void main(String[] args) {        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();        // 当前dubbo consumer的application配置,不设置会直接抛异常        ApplicationConfig applicationConfig = new ApplicationConfig();        applicationConfig.setName("xxx_test_service");        // 注册中心配置        RegistryConfig registryConfig = new RegistryConfig();        // 注册中心这里需要配置上注册中心协议,例如下面的zookeeper        registryConfig.setAddress("zookeeper://127.0.0.1:2181");        registryConfig.setGroup("test_group");        reference.setApplication(applicationConfig);        reference.setRegistry(registryConfig);        // 设置调用的reference属性,下面只设置了协议、接口名、版本、超时时间        reference.setProtocol("dubbo");        //约定接口        reference.setInterface("com.xxx.test.TestService");        reference.setVersion("1.0.0");        reference.setTimeout(1000);        // 声明为泛化接口        reference.setGeneric(true);        // GenericService可以接住所有的实现        GenericService genericService = reference.get();        // 构造复杂参数,下面的示例中,头两个参数为string类型,后一个是一个复杂类型,但都可以通过map构造。        Map<String, Object> param = new HashMap<>();        param.put("test1", "a");        param.put("test2", "b");        Map<String,Object> thirdParam = new HashMap<>();        thirdParam.put("class","java.util.Map");        thirdParam.put("subParam1","c");        thirdParam.put("subParam2","d");        param.put("test3",thirdParam);        Object result = genericService.$invoke("myMethod", new String[]{"java.lang.String", "java.lang.String", "com.xxxtest.MyParam"}, new Object[]{"123", "ddd",param});        System.out.println(JSON.toJSONString(result));    }

到此,关于“如何通过API方式使用dubbo泛化调用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/147021.html

(0)

相关推荐

  • session中的增删改方法是什么(session两种实现方式)

    技术如何进行session和v$session说明这期内容当中小编将会给大家带来有关如何进行session和v$session说明,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、前言

    攻略 2021年12月17日
  • uk是哪个国家的缩写,欧洲各个国家的英文缩写

    技术uk是哪个国家的缩写,欧洲各个国家的英文缩写AT Austria 奥地利 欧洲 BE Belgium 比利时 欧洲
    BG Bulgaria 保加利亚 欧洲
    CH Switzerland 瑞士 欧洲
    CZ Czec

    生活 2021年10月27日
  • 环境搭建

    技术环境搭建 环境搭建1.卸载JDK直接删除Java的安装目录
    删除环境变量中的JAVA_HOME
    删除path下的关于Java的目录
    打开命令提示符输入java -version进行确认2.安装JDK

    礼包 2021年11月27日
  • 对镜贴花黄通假字,当窗理云鬓对镜贴花黄描述的是谁

    技术对镜贴花黄通假字,当窗理云鬓对镜贴花黄描述的是谁当窗理云鬓对镜贴花黄描述的是花木兰对镜贴花黄通假字。意思是当着窗子整理像乌云一样柔美的头发,对着镜子在额上贴好花黄。
    《木兰诗》是一首北朝民歌,宋郭茂倩《乐府诗集》归入

    生活 2021年10月30日
  • 党的思想路线的核心是,实事求是思想路线的目的是什么

    技术党的思想路线的核心是,实事求是思想路线的目的是什么实事是客观存在着的一切事物党的思想路线的核心是,求是我们去探究,是就是事物发展的规律,也就是按照事物的本来面貌去发掘事物发展的规律,而规律是主观认识,但必须与实事相符

    生活 2021年10月26日
  • INNODB引擎的4大特性

    技术INNODB引擎的4大特性 INNODB引擎的4大特性1、插入缓存
    2、二次写
    3、自适应哈希
    4、预读
    一、插入缓存(insert buffer)
    插入缓冲(insert Buffer/Chang

    礼包 2021年11月26日