一看就会!Dubbo 泛化调用简明教程——含不同类型入参处理

本文详细介绍了如何在Dubbo中实现泛化调用,包括配置POM.xml和application.yml文件,处理不同类型的入参如原生类型、DTO、Map和JSON,以及集合和泛型入参。同时,还提供了服务提供者和消费者的具体实现步骤以及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

泛化调用是指在调用方没有服务方提供的 API 的情况下,对服务方进行调用,并且可以正常拿到调用结果。

泛化调用主要用于实现一个通用的远程服务 Mock 框架,通过实现 GenericService 接口处理所有服务请求,比如如下场景:

  1. 网关服务:如果要搭建一个网关服务,那么服务网关要作为所有 RPC 服务的调用端。但是网关本身不应该依赖于服务提供方的接口 API(否则每一个新的服务发布,都需要修改网关的代码并重新部署),所以需要泛化调用支持。
  2. 测试平台:如果要搭建一个可以测试 RPC 调用的平台,用户输入分组名、接口、方法名等信息,就可以测试对应的 RPC 服务。

下面,我用一系列 Demo 介绍如何使用 Dubbo 实现泛化调用。

配置

pom.xml

引入 Dubbo 依赖:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.7.5</version>
</dependency>

使用 Zookeeper 作为配置中心(需要在本机安装好 zk):

<dependency>
    <groupId>org.apache.curator</groupId>
    <artifactId>curator-recipes</artifactId>
    <version>4.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.10</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
    </exclusions>
</dependency>

application.yml

服务提供者为 Spring Boot 项目,需要在 application.yml 中配置 Dubbo:

server:
  port: 8090
dubbo:
  application:
    version: 1.0.0
    name: api-gateway-test-provider
  registry:
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: cn.wzz.gateway.interfaces
  provider:
    timeout: 30000

服务 Provider

rpc 模块项目结构
rpc 模块项目结构


服务接口IActivityBooth

public interface IActivityBooth {
   
	// case1: 入参为字符串、整数等原生数据类型
    String sayHi(String msg);
	// case2: 入参为DTO 对象
    String describeUser(User user);
	// case3: 入参为 DTO 对象集合
    String describeUsers(List<User> user);
	// case4: 入参为泛型对象
    String describeWrapper(Wrapper<User> userWrapper);
}

DTO 对象UserWrapper):

Wrapper包装类,用于测试含泛型入参的泛化调用

public class User implements Serializable {
   
    private String uid;
    private Integer age;
    private String nickName;
    //getter/setter
}

public class Wrapper<T
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值