Dubbo接口泛化调用

布满荆棘的人生 2023-06-19 12:30 61阅读 0赞

涉及jar包

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>dubbo</artifactId>
  4. <version>2.8.4</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.101tec</groupId>
  8. <artifactId>zkclient</artifactId>
  9. <version>0.10</version>
  10. </dependency>

如果入参为一个对象,类似于:

  1. Person person = new PersonImpl();
  2. person.setName("xxx");
  3. person.setPassword("yyy");

调用方式如下:

  1. package com.deppon.uap.appservice.util;
  2. import com.alibaba.dubbo.config.ApplicationConfig;
  3. import com.alibaba.dubbo.config.ReferenceConfig;
  4. import com.alibaba.dubbo.config.RegistryConfig;
  5. import com.alibaba.dubbo.config.utils.ReferenceConfigCache;
  6. import com.alibaba.dubbo.rpc.service.GenericService;
  7. import java.util.ArrayList;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. public class TambcdmUtil {
  12. public static void main(String[] args) {
  13. // 普通编码配置方式
  14. ApplicationConfig application = new ApplicationConfig();
  15. application.setName("xxx_test_service");
  16. // 连接注册中心配置
  17. RegistryConfig registry = new RegistryConfig();
  18. registry.setAddress("zookeeper://192.168.0.1:2181");
  19. ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
  20. reference.setApplication(application);
  21. reference.setRegistry(registry);
  22. reference.setInterface("com.xxx.test.TestService");
  23. // 声明为泛化接口
  24. reference.setGeneric(true);
  25. reference.setGroup("stestn1");
  26. reference.setVersion("1.0.0");
  27. try {
  28. ReferenceConfigCache cache = ReferenceConfigCache.getCache();
  29. GenericService genericService = cache.get(reference);
  30. Map<String, Object> maps = new HashMap<String, Object>();
  31. maps.put("name","xxx");
  32. maps.put("password","xxx");
  33. // 基本类型以及Date,List,Map等不需要转换,直接调用
  34. Object result = genericService.$invoke("funcName",
  35. new String[]{ "Person"},
  36. new Object[]{ maps});
  37. System.out.println(result);
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. }
  42. }

发表评论

表情:
评论列表 (有 0 条评论,61人围观)

还没有评论,来说两句吧...

相关阅读

    相关 dubbo调用

    dubbo泛化调用 一、前言 > 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实

    相关 dubbo远程调用接口

    最近做了一个项目需要使用dubbo调用远程接口,写出来分享一下 首先需要提供接口的人给你接口地址,注册中心地址,以及参数类型,参数类型可以是实体类,可以让客户直接把实体类发给