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)

相关推荐

  • 如何理解docker

    技术如何理解docker这篇文章给大家介绍如何理解docker,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 随着用户的需求越来越多样,系统的规模越来越庞大,运行的软件越来越复杂,环境配置问题

    攻略 2021年10月20日
  • 光影精灵,光影精灵和暗影精灵的区别是什么

    技术光影精灵,光影精灵和暗影精灵的区别是什么区别1光影精灵:定位首先,光影精灵5和暗影精灵5最直观的区别就是两者的设计风格完全不同,这个不需要什么分析,也不需要懂产品,只要是有认知能力的人看到图片都会得出这样的结论。两者

    生活 2021年10月22日
  • c++编译器(c++用什么软件编程)

    技术C++ OpenCV如何模拟实现微信跳一跳小编给大家分享一下C++ OpenCV如何模拟实现微信跳一跳,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!实机演示Gif:思路:获取小黑人的位置,获得目标方

    2021年12月17日
  • 怎么理解Redis中的分布式锁

    技术怎么理解Redis中的分布式锁本篇内容介绍了“怎么理解Redis中的分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有

    攻略 2021年10月26日
  • C#如何实现汉字之间互换

    技术C#如何实现汉字之间互换今天就跟大家聊聊有关C#如何实现汉字之间互换,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。计算机中第一层的数据都是用二进制及0和1来表

    攻略 2021年11月24日
  • ios-xr如何配置PBB-EVPN

    技术ios-xr如何配置PBB-EVPN这篇文章给大家分享的是有关ios-xr如何配置PBB-EVPN的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。配置l2vpn
    bridge group

    攻略 2021年11月21日