Skip to content

泛化调用

Dubbo,提供了 泛化调用机制,再不依赖于服务提供者的 API 接口的情况之下进行远程服务调用的机制。

使用泛化调用,具有如下的好处:

  • 接口解耦:消费者无需直接依赖于服务提供者的接口,减少编译依赖,系统架构更加灵活
  • 动态调用:在运行时动态指定调用的服务名,方法名称和参数
  • 跨语言调用:有利于不同语言编写的服务之间的交互

在 Dubbo 之中,提供了 GenericService 来处理泛化调用,具体的调用方式如下:

java
@DubboReference(interfaceName = "接口的全限定名")
private GenericService genericService;
java
genericService.$invoke(方法名,方法参数类型, 实际的方法参数)

具体的调用案例如下:

java
@DubboReference(interfaceName = "com.coding.helloworld.api.UserService")
private GenericService genericService;
java
@Test
public void testGenericService() throws IOException {
    Map<String,Object> map = new HashMap<>();
    map.put("class","com.coding.helloworld.api.vo.UserReq");
    map.put("userName","coding123");
    Object getUserInfo = genericService.$invoke(
        "getUserInfo", new String[]{"com.coding.helloworld.api.vo.UserReq"}, new Object[]{map});
    log.info("getUserInfo:{}",getUserInfo);
}