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)

相关推荐

  • 怎么用Vue实现大屏页面的屏幕自适应

    技术怎么用Vue实现大屏页面的屏幕自适应本篇内容介绍了“怎么用Vue实现大屏页面的屏幕自适应”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年10月22日
  • 指南针的红色指针指向什么方向,请问指南针红针指的是什么方向

    技术指南针的红色指针指向什么方向,请问指南针红针指的是什么方向好像并没有个标准规定靠颜色分辨南北极,指南针,指北针只是叫法习惯指南针的红色指针指向什么方向。知道当地南北方向,看指南针指针指向,不管红色白色或黑色一端,你都

    生活 2021年10月24日
  • MySQL多表操作与事务

    技术MySQL多表操作与事务 MySQL多表操作与事务一、多表查询1.笛卡尔积概念:有两个集合A,B,取这两个集合的所有组成情况。要完成多表查询需要消除无用的数据。2.多表查询的分类内连接查询1.隐式内

    礼包 2021年11月4日
  • 怎样可以,和平精英怎么才能变厉害

    技术怎样可以,和平精英怎么才能变厉害大家好怎样可以!这里是爱分享的零助攻!很高兴回答您的问题!和平精英怎么样变厉害?可以说需要具备的条件太多了。第一:能力问题能力又分先天和后天,有的人天生就是玩游戏的好手,接受能力和适应

    生活 2021年10月21日
  • Redis要比Memcached更火的原因有哪些

    技术Redis要比Memcached更火的原因有哪些本篇内容介绍了“Redis要比Memcached更火的原因有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这

    攻略 2021年10月22日
  • 线程池的创建方式有哪些

    技术线程池的创建方式有哪些这篇文章主要讲解了“线程池的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“线程池的创建方式有哪些”吧!什么是线程池?线程池(Thr

    攻略 2021年10月21日