我们每次去发布一个服务,必然会先定义一个接口,并且把这个接口放在一个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();
}
}