Dubbo3泛化调用实战指南

Dubbo3 的泛化调用允许客户端在不依赖服务端接口 JAR 包的情况下发起远程调用,适用于动态调用、网关转发等场景。以下是具体实现方式:


一、客户端泛化调用

  1. API 编程方式
    通过 GenericService 接口动态调用,参数和返回值使用 Map 或基本类型表示:

    // 创建泛化引用配置
    ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
    reference.setInterface("com.example.UserService"); // 服务接口全限定名
    reference.setGeneric("true"); // 声明泛化调用
    
    // 获取泛化代理对象
    GenericService genericService = reference.get();
    
    // 调用方法(参数类型需全限定名)
    Object result 
### 实现和使用 Dubbo 泛化调用 #### 什么是泛化调用 Dubbo 提供了一种称为泛化接口的方式,允许在不依赖具体服务接口的情况下进行远程调用。这种方式非常适合用于动态环境下的服务调用以及一些特殊场景中的调试工作。 #### 准备工作 为了能够顺利地完成泛化调用的操作,在配置文件中需要指定 `generic` 参数为 true 或者 string 形式[^2]。这表明当前的服务支持泛化的形式被其他方所调用。 #### 获取通用服务实例 通过 Spring 上下文来取得名为 genericService 的 Bean 并将其转换为目标类型 GenericService。此对象实际上是由 Dubbo 创建的一个代理实体[^4]。 ```java ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"spring.xml"}); GenericService demoService = (GenericService)context.getBean("demoService"); ``` #### 执行方法调用 对于已经获得的 GenericService 对象来说,可以利用 `$invoke()` 方法来进行任意函数的调用操作。该方法接受三个参数:要执行的方法名称、参数类型的数组表示法以及实际传递给目标方法的数据列表。 ```java Object result = demoService.$invoke("sayHello", new String[] {"java.lang.String"}, new Object[] {"world"}); System.out.println(result); ``` 上述代码片段展示了如何向远端服务器发送 sayHello 请求并附带字符串 "world" 作为输入参数;最后打印返回的结果值。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码的余温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值