Dubbo泛化

我们每次去发布一个服务,必然会先定义一个接口,并且把这个接口放在一个api的jar包中,给到服务调用方来使用。本质上,对于开发者来说仍然是面向接口编程,而且对于使用者来说,可以不需要关心甚至不需要知道这个接口到底是怎么触发调用的。简而言之,泛化调用,最最直接的表现就是服务消费者不需要有任何接口的实现,就能完成服务的调用。

代码实例:

  • provider

在服务端定义了一个接口

@DubboService(protocol = {"dubbo"})
public class DemoService implements IDemoService{

    @Override
    public String getTxt() {
        return "Hello world!!!";
    }
}

注册到nacos的url列表

side=provider

methods=getTxt

release=2.7.7

deprecated=false

dubbo=2.0.2

pid=10884

interface=com.springboot.dubbo.provider.services.IDemoService

generic=false

path=com.springboot.dubbo.provider.services.IDemoService

protocol=dubbo

application=spring-boot-dubbo-sample-provider

dynamic=true

category=providers

anyhost=true

timestamp=1608312655153
  • consumer
@RestController
public class DemoController {
    // 设置generic=true代表开启泛化功能
    @DubboReference(interfaceName = "com.springboot.dubbo.provider.services.IDemoService",generic = true,check = false)
    GenericService genericService;

    @GetMapping("/demo")
    public String demo(){
        //对象的传值
        Map<String,Object> user=new HashMap<>();
        user.put("",""); //key表达user对象中的属性,value表达属性的值
        return genericService.$invoke("getTxt",new String[0],null).toString();
    }
}
上一篇:Android四大组件之ContentProvider:诞生缘由,ContentProvider内容提供者,ContentResolver内容解析器


下一篇:Java-NIO之Selector创建过程详解