手动调用指定Dubbo接口(三)----GenericService篇

一看就会!Dubbo 泛化调用简明教程——含不同类型入参处理 Dubbo 泛化调用入门教程,案例详细,简洁易懂! 阅读详情

我写了个方法,可以给方法传递指定的Dubbo接口名,方法名,参数值,方法来调用我们指定的Dubbo接口,并返回结果。

这次用的是Dubbo的GenericService。

 

示例代码:

@Controller
@RequestMapping("/test")
public class TestController {

    /**
     * @param interfaceName Dubbo接口名
     * @param methodName    方法名
     * @param parameter     参数值
     * @return
     */
    @RequestMapping(value = "/test2", method = RequestMethod.POST)
    @ResponseBody
    public static Object test2(@RequestParam(value = "interfaceName") String interfaceName,
                            @RequestParam(value = "methodName") String methodName,
                            @RequestParam(value = "parameter") String parameter) {

        ApplicationConfig application = new ApplicationConfig("test-consumer"); //参数为dubbo消费方的名称
        RegistryConfig registryConfig=new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        application.setRegistry(registryConfig);
        
        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
        reference.setApplication(application);
        reference.setInterface(interfaceName);
//            reference.setGroup("my-group");
//            reference.setVersion("1.0.0");
        reference.setTimeout(3000);
        reference.setGeneric(true);
        GenericService genericService = reference.get();
        Object object = genericService.$invoke(methodName, new String[]{"java.lang.String"}, new Object[]{parameter});    //调用泛化接口,返回单一元素

        //列表查询测试
        Query query = new Query();
        query.setOrderStatus(1);
        Object object2 = genericService.$invoke("selectList", new String[]{"com.test.Query"}, new Object[]{query});    //调用泛化接口,返回列表
        System.out.println(object2);

        return object;
    }

    public static void main(String[] args) {
        test2("com.test.OrderService","selectOne","ABC123");
    }
}

注:

1,registryConfig.setAddress()方法填写的zookeeper的地址。

2,调用泛化接口时,reference.setGeneric(true)是必要的。

 

GenericService简介

GenericService是Dubbo提供的泛化接口。

当服务提供者使用这个接口时,可以省略Interface的代码,省略方法和参数的声明,通过指定接口名称的方式接入zookeeper。这时GenericService变成了一个网关。

当服务消费者使用这个接口时,有个好处是不依赖服务提供者的Interface接口类,而是通过指定具体接口类地址的方式,创建消费者,并去zookeeper查找对应的提供者,然后发起调用。

GenericService接口只有一个方法:

Object $invoke(String var1, String[] var2, Object[] var3) throws GenericException;

其中第一个参数是方法名。

第二个参数是一个字符串数组,这是接口方法每个参数的类型全路径。

第三个参数是Object数组,是传给方法的具体参数列表。

$invoke()方法的返回值:当返回的是单个非简单元素时,返回值类型实际上是HashMap,当返回的是列表时,返回值类型实际上是ArrayList<HashMap>。

详细一点的介绍参见:

Dubbo的GenericService简介和基本使用

 

本文结束

 

三篇手动调用指定Dubbo接口的文章:

手动调用指定Dubbo接口(一)----Spring注入篇

手动调用指定Dubbo接口(二)----Reference篇

手动调用指定Dubbo接口(三)----GenericService篇

dubbo泛化调用与隐式传参 duboo泛化调用原理分析 阅读详情

相关推荐

Dubbo3泛化调用实战指南

Dubbo3的泛化调用机制支持客户端无需依赖服务接口即可发起远程调用,适用于动态场景。客户端通过GenericService接口或XML配置实现方法动态调用,需指定完整参数类型。服务端需实现GenericService接口处理泛化请求,并通过Spring或API方式暴露服务。典型应用包括网关转发、跨语言调用(需Triple协议)和测试调试。需注意参数需全限定名、存在额外序列化开销及返回值需手动转换。Dubbo3保持对Dubbo2的兼容性,推荐使用Triple协议提升

HTTP404_CN的博客 1697

Dubbo的GenericService简介和基本使用

简介 GenericService是Dubbo提供的泛化接口,用来进行泛化调用。 GenericService接口只有一个方法: Object $invoke(String var1, String[] var2, Object[] var3) throws GenericException; 第一个参数是方法名。 第二个参数是一个字符串数组,这是接口方法每个参数类型的全路径。 第三个参数是Object数组,是传给方法的具体参数列表。 Dubbo服务的提供者和消费者都可以使用这个接...

lkforce 1万+

Dubbo泛化调用原理与实践:无接口依赖的RPC通信方案

在分布式微服务架构中,RPC(远程过程调用)是实现服务间通信的核心技术,它通过抽象网络通信细节,让开发者能够像调用本地方法一样调用远程服务。其工作原理通常基于接口契约,在编译期进行类型绑定,确保调用的安全性和效率。然而,这种强类型依赖在动态性要求高的场景下会成为限制,例如服务测试平台、API网关和遗留系统集成等,需要一种更灵活的调用机制。Dubbo泛化调用正是为此设计的技术方案,它通过GenericService接口和反射机制,将接口契约从编译期延迟到运行期,允许调用方在不依赖服务提供者接口Jar包的情况下

weixin_31292729的博客 245

dubbo泛化

package dubbo; import org.apache.dubbo.config.ApplicationConfig; import org.apache.dubbo.config.ReferenceConfig; import org.apache.dubbo.config.RegistryConfig; import org.apache.dubbo.config.utils.ReferenceConfigCache; import org.apache.dubbo.rpc.service.

java_t_t的博客 1023

dubbo接口测试

设计模式应用场景代码体现简化 Dubbo 复杂 API封装底层调用流式 API 构建链式调用配置优先级策略URL/Group 的多级查找配置加载流程定义加载顺序。

学海无涯 390

skill使用教程,从小白到大神进阶

(2)突然无法使用(NodeJS安装参考):如果正常使用中,突然发现claude命令无法启动claude-code了,可能是claude-code正在后台自动更新,等待几分钟后再尝试使用,如果还是不行,请先运行下列代码移除claude-code,注意,如果你的node安装目录不同,要替换成自己的安装目录:rm -rf /opt/homebrew/lib/node_modules/@anthropic-ai/claude-code。安装完成后,让我们启动 Claude Code,看看它长什么样。

weixin_45036829的博客 2009

dubbo泛化处理

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33727510的博客 668

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 506

java实现dubbo代码远程调用-泛化调用 方式

学习dubbo的泛化调用

qq_38653981的博客 1943

AIDD机器学习深度学习药物发现与设计教程总结

AIDD(AI Drug Discovery & Design):是近年来非常火热的技术应用,且已经介入到新药设计到研发的大部分环节当中,为新药发现与开发带来了极大的助力。倾向于机器对数据库信息的自我学习,可以对数据进行提取和学习,一定程度上避免了化合物设计过程中的试错路径,同时还会带来很多全新的结构,为药物发现打破常规的结构壁垒。覆盖了机器学习和深度学习,能与新药研发相结合并实质性的应用到靶点预测、高通量筛选、药物设计、药物的ADMET性质预测等;且算力方面,由早期应用于药物发现领域的决策树、随机

wutianlin0723的博客 6814

拯救者R7000P(2021)装双系统Ubuntu20.04 解决联发科MT7921无线网卡在Ubuntu中不能联网

拯救者R7000P(2021)装双系统Ubuntu20.04/Ubuntu18.04 电脑配置:联想拯救者R7000P CPU:AMD R7-5800H GPU:RTX3060-6G 内存:16GB 固态:500G(原装)+500(加装) 1.做系统盘(本文以Ubuntu20.04为例) 1.下载Ubuntu20.04镜像 直接去Ubuntu官网或者一些国内的镜像去下载都可以,这里给出一个网址https://ubuntu.com/download/desktop,根据需要下载自己学要的Ubuntu版本,后缀

qq_41108639的博客 1万+

Java之dubbo泛化调用

对于dubbo泛化,官方文档给出很多案例,接下来我以注册中心为nacos为例进行讲解。 对于dubbo泛化调用需要几个参数,方法名,参数类型,接口入参。 于是,我们封装了dubboRequest 对象。 @Data public class DubboSendRequest { /** * 用例名称 */ private String caseName; /** * 接口名称 */ private String interface

weixin_42899554的博客 1639

NVIDIA Isaac GR00T N1 人形机器人强化学习入门教程(二)详细步骤

LeRobot 格式 1.1 加载数据集 要加载数据集,我们需要定义以下 3 项内容: 在数据中显示图像帧 我们还可以对 LeRobotSingleDataset 类中的数据进行一系列转换。下面展示了如何对数据进行转换。 现在看看应用转换后的数据有何不同。 例如,对状态和操作进行规范化和串联,对视频图像进行裁剪、调整大小和颜色抖动。 二、GR00T 推断 本教程介绍如何使用 GR00

2506_90492529的博客 3012

Dubbo接口测试实战:JMeter泛化调用与直连压测指南

Dubbo作为主流Java RPC框架,其接口测试本质是模拟消费者端的远程方法调用,而非HTTP请求。它基于RPC通信模型,依赖服务发现、序列化(如Hessian2)、泛化调用等核心机制,与RESTful测试存在根本差异。掌握泛化调用可实现零业务jar包依赖的字符串驱动测试,结合直连模式能绕过注册中心瓶颈,显著提升压测吞吐量与稳定性。本文聚焦Dubbo 2.7.x生态,详解JMeter通过JSR223+Groovy集成Dubbo SDK、构造类型安全参数、解析GenericObject响应、埋点监控服务端耗

weixin_33720078的博客 493

基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真

新能源微电网是现代电力系统的重要组成部分,能够有效整合分布式能源(如光伏、风力发电)和储能设备,实现局部区域内的能源高效利用。微电网的运行控制涉及多源能量管理、负荷平衡以及并网/孤岛模式切换等关键问题。基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真,可以帮助研究者验证控制策略的有效性,并优化系统的动态性能和经济性。本项目旨在构建一个完整的新能源微电网模型,包括电源模块、储能模块、负荷模块以及控制器模块,并通过仿真分析其运行特性。

xiaoheshang_123的博客 420

Qt实现思维导图功能5『纵向分布模式』

思维导图纵向分布模式:模式一

浮生流年的博客 1055

Dubbo接口,泛型,直接调用注册中心的服务

 public static void main(String[] args) {        ReferenceConfig&lt;GenericService&gt; reference = new ReferenceConfig&lt;GenericService&gt;();        reference.setApplication(new ApplicationConfig("c...

airwolk的博客 3341

疾风气象大模型4.0白皮书

《疾风气象大模型白皮书摘要》 疾风气象大模型(J-AFM)是国内首个基于3D建模的气象智能平台,突破传统二维气象分析的局限,采用体素化技术构建"x-y-z-t"四维统一模型,实现从分钟级短临到30天跨时效的连续预测。核心技术包括:1)多源数据三维同化,融合雷达、卫星、风廓线等异构数据;2)物理约束AI解码器,嵌入能量守恒、湍流封闭等气象原理;3)行业适配插件,服务风电、光伏、航空等领域,如山地风场尾流校正、云影短临预测。平台支持批流一体推理与边缘部署,提供概率化输出和误差溯源能力,显著降

专注AI大模型,软件混淆,授权 539

00-Dubbo-原生API开发应用

该参数标识的是 Dubbo 服务之间通信时使用的协议报文版本,用于兼容不同版本的 Dubbo 框架之间的通信,与当前使用的 Dubbo 框架版本 3.3.6 是两个不同的概念。开启后,提供者会把注册中心的元数据缓存到本地磁盘文件,当注册中心出现故障或网络不可达时,服务依然可以基于本地缓存继续对外提供服务,增强了系统的容错能力。:允许任意主机访问服务。当该参数为 true 时,表示当前服务已被标记为废弃,调用方在引用该服务时会收到告警提示,通常用于服务升级过程中的平滑过渡,提醒调用方尽快迁移到新版本服务。

Bonnie_1215的博客 215

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从零开始手写 dubbo rpc 框架-12-generic-泛化调用

generic 泛化调用 说明 泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。 GenericService barService = (GenericService) applicationContext.getBea...

1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Dubbo的GenericService泛化使用

1.概念 GenericService是Dubbo提供的泛化接口。 当服务提供者使用这个接口时,可以省略Interface的代码,省略方法和参数的声明,通过指定接口名称的方式接入ZooKeeper。这时GenericService变成了一个网关。 当服务消费者使用这个接口时,有个好处是不依赖服务提供者的Interface接口类,而是通过指定具体接口类地址的方式,创建消费者,并去zookeeper查找对应的提供者,然后发起调用。 GenericService接口只有一个方法: Object $inv

yuanyuan5201的专栏 1631

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

dubbo泛化调用之消费者传递JavaBean

2. 对于复杂参数类型,需要先生成对应的JavaBean类,并将参数封装到该类中。运行消费者单元测试代码,请求提供者的dubbo泛化接口,进入到提供者机器,发现请求体已经传递过来,当提供者有多台机器时,请求会负载均衡,轮询到不同的机器上。首先需要使用泛化调用的客户端对象(GenericService)来调用服务方法,并传入方法名和参数列表。参数列表可以使用Object数组来表示,如下所示。在Dubbo中,泛化调用可以实现对任何类型的服务方法的调用,包括复杂的参数类型。3. 消费者调用代码完整如下。

大猩猩的博客 728

什么是泛化调用?怎么实现Dubbo的泛化调用?代码怎么写?如果有疑问,请进!!

它主要应对一种场景的,我要调用某些服务的某些接口,但是我并不知道有哪些系统,所以也就没有办法通过Jar包方式依赖,这种解决方案呢,除了HTTP呢,也可以RPC,但是前提呢就需要被调用的某些服务通过某种方式主动注册到注册中心,也就是服务提供者,而这边呢从注册中心拿到注册的信息以及接口信息(相当于消费端),拿到以后可以使用Dubbo泛化调用方式(也可以用其他方式)来调用服务端的接口。

dfBeautifulLive的博客 1875

dubbo泛化调用使用及问题总结

最近在项目开发中需要使用到dubbo泛化调用功能 ,以前使用一直用xml配置方式,没研究过dubbo泛化调用。通过查看官方文档、网上查找dubbo泛化调用资料最终完成了dubbo泛化调用功能。在此总结一下dubbo泛化调用开发过程及遇到的一些问题以及处理方法,还有部分问题尚未成功处理,欢迎大家有兴趣的朋友留言讨论 dubbo版本:2.8.4 1、dubbo泛化功能说明 dubbo泛化调用就是...

qq_24462991的博客 8053

终于知道Dubbo泛化调用这个功能的用途了

两年前,笔者读Dubbo源码的时候就看到了泛化调用(GenericService)的逻辑,当时不知道为啥会有这个逻辑,想不明白,于是就跳过了。两年后再次接触Dubbo才看懂了泛化调用的逻辑...

吴就业 2683

dubbo里面的GenericService干啥的

两个用途一直是泛化服务,一种是泛化引用。前者是为了provider省事,后者是消费者省事。先介绍泛化服务怎么做到的: 比如提供者想省事,虽然提供了10个方法,但是不想在接口里面写十个方法,也就不用给这十个方法做函数声明、参数声明了。直接通过: ServiceConfig<GenericService> service = new ServiceConfig<Generic...

weixin_30257433的博客 609
上一篇: 手动调用指定Dubbo接口(二)----Reference篇
下一篇: 对象添加到集合之后再修改对象,会发生什么
lkforce
博客等级 码龄16年 399粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值