当前位置: 首页 > news >正文

dubbo复习:(15)泛化调用

客户端在没有拿到服务器端接口定义的情况下通过反射获取服务
1.服务器端定义接口

package cn.edu.tju.service;public interface DevelopService {String invoke(String param);
}

2.服务器端实现接口

package cn.edu.tju.service;import org.apache.dubbo.config.annotation.DubboService;@DubboService(group = "group1",version = "1.0")
public class DevelopProviderServiceV1 implements DevelopService{@Overridepublic String invoke(String param) {StringBuilder s = new StringBuilder();s.append("ServiceV1 param:").append(param);return s.toString();}
}

3.客户端在没有拿到服务器端接口定义的情况下,直接通过反射获取服务

package cn.edu.tju.service;import com.alibaba.fastjson.JSON;
import org.apache.dubbo.common.config.ReferenceCache;
import org.apache.dubbo.config.ReferenceConfig;
import org.apache.dubbo.config.utils.SimpleReferenceCache;
import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class GenericTask implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {GenericService genericService = buildGenericService("cn.edu.tju.service.DevelopService","group1","1.0");//传入需要调用的方法,参数类型列表,参数列表Object result = genericService.$invoke("invoke", new String[]{"java.lang.String"}, new Object[]{"g1"});System.out.println("GenericTask Response: " + JSON.toJSONString(result));}private GenericService buildGenericService(String interfaceClass, String group, String version) {ReferenceConfig<GenericService> reference = new ReferenceConfig<>();reference.setInterface(interfaceClass);reference.setVersion(version);//开启泛化调用reference.setGeneric("true");reference.setTimeout(30000);reference.setGroup(group);ReferenceCache cache = SimpleReferenceCache.getCache();try {return cache.get(reference);} catch (Exception e) {throw new RuntimeException(e.getMessage());}}
}

相关文章:

  • Oracle AVDF(审计保险库和数据库防火墙)常见问题
  • PDF高效编辑器革新:一键智能转换PDF至HTML,轻松开启文件处理全新时代!
  • [JAVA数组] 三个数的最大乘积
  • 2024-5-14——完成所有任务需要的最少轮数
  • 不是从APP store下载的APP在mac上一直提示有损坏,打不开怎么办?
  • PostgreSQL启动报错“could not map anonymous shared memory: Cannot allocate memory”
  • Python学习从0开始——Kaggle机器学习003总结
  • [线程与网络] 网络编程与通信原理(五): 深入理解网络层IP协议与数据链路层以太网协议
  • 3DGS语义分割之LangSplat
  • 步进电机双闭环细分控制(matlab仿真)内含课设等参考文件
  • 新闻出版署发布新规定,腾讯游戏限制未成年人端午期间每天一小时
  • 搭载昇腾310NPU的Orange Pi AIpro开箱体验以及深度学习样例测试
  • LAMP分布式安全方案搭建网页 (LinuxCentOS7+Apache+Mariadb+PHP)包括服务端口及防火墙规则配置
  • 防雷接地测试方法及注意事项
  • 前端 JS 经典:判断数组的准确方法
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Angular6错误 Service: No provider for Renderer2
  • ES6之路之模块详解
  • Java 网络编程(2):UDP 的使用
  • js 实现textarea输入字数提示
  • k8s如何管理Pod
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 聊一聊前端的监控
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 项目实战-Api的解决方案
  • 转载:[译] 内容加速黑科技趣谈
  • #android不同版本废弃api,新api。
  • #vue3 实现前端下载excel文件模板功能
  • (02)Hive SQL编译成MapReduce任务的过程
  • (笔记)M1使用hombrew安装qemu
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (南京观海微电子)——COF介绍
  • (四)库存超卖案例实战——优化redis分布式锁
  • (四)模仿学习-完成后台管理页面查询
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (杂交版)植物大战僵尸
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .net解析传过来的xml_DOM4J解析XML文件
  • /etc/shadow字段详解
  • @Service注解让spring找到你的Service bean
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • [000-002-01].数据库调优相关学习
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C++]二叉搜索树
  • [Django ]Django 的数据库操作
  • [Erlang 0129] Erlang 杂记 VI 2014年10月28日
  • [FreeRTOS 基础知识] 栈
  • [GESP202312 四级] 田忌赛马
  • [HCTF 2018]WarmUp (代码审计)