除了Invoke,还能怎么调用Dubbo接口

Dubbo接口测试除了通过telnet invoke来调用,还有其他的方式吗?

Dubbo官方文档中有一个示例,关于泛化调用Dubbo接口
这里截取官方文档中对于泛化接口调用的说明

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

我们 通过 API 方式使用泛化调用
先引入官方提供的依赖服务

import com.alibaba.dubbo.rpc.service.GenericService;

使用 GenericService 请求dubbo接口


    public Object invokeDubboService(DubboTestQuery dubboTestQuery) {

        ReferenceConfig<GenericService> reference = new ReferenceConfig<GenericService>();
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("remoteInvoke");
        applicationConfig.setVersion("");
        RegistryConfig registryConfig = new RegistryConfig();

        registryConfig.setFile("/tmp/dubbo.cachr");
        // configZkAddress 就是你zookeeper的注册ip
        registryConfig.setAddress(configZkAddress);
        registryConfig.setProtocol("zookeeper");
        // 这里配置dubbo的注册中心信息,因此demo没有额外的dubbo.xml配置文件
        reference.setApplication(applicationConfig);
        reference.setRegistry(registryConfig);

        // 弱类型接口名
        reference.setInterface(dubboTestQuery.getServiceName());
        reference.setVersion("1.0.0");
        // 声明为泛化接口
        reference.setGeneric(true);
        reference.setProtocol("dubbo");
        //不重试,重试会造成数据重复执行
        reference.setRetries(0);
        reference.setTimeout(10000);

        // 用org.apache.dubboinfo.rpc.service.GenericService可以替代所有接口引用
        GenericService genericService = reference.get();
        Object result = genericService.$invoke(dubboTestQuery.getMethodName(), dubboTestQuery.getParamsTypes(),dubboTestQuery.getParams());
        return result;
    }

其中实体类DubboTestQuery字段(get,set方法这些就不放出来了)

public class DubboTestQuery {
    /*** Dubbo接口服务名*/
    private String serviceName;
	/*** 请求参数Dubbo接口方法名*/
    private String methodName;
    /*** 请求参数类型*/
    private String[] paramsTypes;
    /*** 请求参数*/
    private Object[] params;
}

这里简单说明一下这四个字段

  1. serviceName
    接口服务名,比如:com.demo.test.IUserService
  2. methodName
    接口下的方法名,比如:add(User user)
  3. paramsTypes
    请求参数类型,因为一个方法包含多种类型的入参,所以这里用了一个List来一 一对应入参
    如:[“java.lang.String”,“int”] ,[“com.demo.bo.userBo”]
  4. params
    入参,根据入参类型来填入对应的参数
    如[“testdemo”,1],[{“name”:“test”,“age”:18}]

这样就可以通过 API 方式使用泛化调用

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值