手动调用指定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

ROS2实战:从零部署Cartographer激光SLAM系统

本文详细介绍了在ROS2 Humble环境下,从零开始部署Cartographer激光SLAM系统的完整实战流程。内容涵盖环境准备、Cartographer安装(APT与源码编译两种方式对比)、工作空间与功能包创建、核心启动文件与Lua配置文件编写、系统构建与可视化启动,以及地图保存与实战调参技巧,帮助开发者快速构建稳定可靠的机器人SLAM应用。

weixin_29213655的博客 248

dubbo泛化处理

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

weixin_33727510的博客 668

红外与可见光融合避坑指南:LLVIP数据集实测6大算法效果对比

本文基于专为弱光视觉设计的LLVIP数据集,对GTF、DenseFuse、FusionGAN、IFCNN等6种主流红外与可见光图像融合算法进行了深度实测与对比。通过客观指标与可视化分析,揭示了算法在极端弱光下易出现特征丢失的共性问题,并探讨了融合图像对下游目标检测任务的实际增益,为工程选型与算法调优提供了实用指南。

weixin_29092031的博客 439

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

学习dubbo的泛化调用

qq_38653981的博客 1943

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

PCL 点到面的ICP算法【2024最新版】

经典的点到面的ICP算法。博客长期更新,本文最新更新时间为:2024年10月18日。

点云侠的博客 36万+

Java之dubbo泛化调用

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

weixin_42899554的博客 1639

2025华为od面试手撕代码【求字符串表达式结果】

2025华为od面试手撕代码【求字符串表达式结果】

MISAYAONE的博客 1351

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

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

weixin_33720078的博客 493

34、实数域上高效负循环卷积算法解析

本文介绍了一种高效的实数域负循环卷积算法,通过引入离散傅里叶负循环变换(DFNT)避免传统方法的冗余,显著提升计算效率。文章详细分析了算法原理、误差传播机制,并推导出误差与方差界,提出无误差和基于3σ规则的参数设置方案。结合Cooley-Tukey与Gentleman-Sande FFT路径优化,实验验证了算法在不同精度和多项式长度下的性能优势与结果正确性,为密码学与信号处理等领域提供了高精度、高性能的卷积计算解决方案。

salt的博客 114

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (dma), 实现零拷贝

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 dma,实现零拷贝.

J。 1262

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

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

airwolk的博客 3341

Midscene.js(1):Chrome 插件实战之基于 AI 驱动 WEB UI 自动化测试「喂饭教程」

Midscene.js 是一款开源的AI驱动UI自动化工具,支持自然语言交互、数据提取、断言验证等多种功能。自然语言交互。本文将以 Midscene.js Chrome 插件为例,带你从零上手,体验如何用最简单的方式实现高效、智能的UI自动化测试。

blues_C的博客 4404

00-Dubbo-原生API开发应用

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

Bonnie_1215的博客 215

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Dubbo的GenericService泛化使用

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

yuanyuan5201的专栏 1631

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值