一、什么是dubbo
Dubbo是一款高性能、轻量级的开源Java RPC(Remote Procedure Call)框架。在日常开发中大量的应用场景,主要用于不同服务之间的调用。
二、什么是RPC
服务 A、B 两个服务分别部署在两台服务器上,服务 A 需要调用服务 B 上的某个方法,此时因为这是在两台不同的服务器部署的服务,因此需要通过建立网络连接进行交互的这一过程就叫远程服务调用。
三、dubbo的基本原理
Provider(服务提供者)注册地址到注册中心,Consumer(服务消费者)从注册中心读取和订阅 Provider 地址列表,进而对地址发起通信,进行接口的调用。(注意:Dubbo3是应用级服务发现,以应用粒度组织地址数据。而Dubbo2是接口级服务发现,以接口粒度组织地址数据)
名称 说明 Provider 暴露服务的服务提供方 Consumer 调用远程服务的服务消费方 Registry 服务注册与发现的注册中心 Monitor 统计服务的调用次数和调用时间的监控中心 Container 服务运行容器
四、泛化调用
在客户端没有 API 接口及模型类元的情况。可以使用泛化调用。
泛化调用provider最主要的就是调用GenericService 的$invoke方法
然后GenericFilter.invoke获取参数列表,方法名称等信息
最后执行 invoker.invoke执行操作
五、具体使用
1、引入依赖
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
2、Provider 提供接口
1.public interface DataTableAuditManageService {
2. Result
3.}
1.@Service
2.@com.alibaba.dubbo.config.annotation.Service
3.public class DataTableAuditManageServiceImpl implements DataTableAuditManageService {
4.
5. private Logger logger = LoggerFactory.getLogger(getClass());
6.
7. @Override
8. public Result
9. try {
10. return new Result
11. } catch (Exception e) {
12. DefaultLogUtil.outputInvokeFailedMessage(param, "selectArAuditAccSensitiveSingleLogList", e, this.getClass());
13. return new Result
14. }
15. }
16.}
3、Consumer 调用接口
1. public Map
2. if (bean == null) {
3. return null;
4. }
5. ApplicationConfig application = new ApplicationConfig();
6. application.setName("consumer");
7.
8. RegistryConfig registry = new RegistryConfig();
9. //设置注册中心地址
10. registry.setAddress(“”);
11.
12. ReferenceConfig
13. reference.setApplication(application);
14. reference.setRegistry(registry);
15. //接口名
16. reference.setInterface("service.api.DataTableAuditManageService");
17. reference.setGeneric(true);
18. ReferenceConfigCache cache = ReferenceConfigCache.getCache();
19. GenericService genericService = cache.get(reference);
20. //请求参数
21. String[] parameterTypes = new String[]{"service.api.request.AuditAccSensitiveSingleLogRequest"};
22.
23. Map params = new HashMap();
24. params.put("userId",userId);
25. params.put("operatorId", operatorId);
26. params.put("invokeProject", invokeProject);
27. params.put("startDate",startDate);
28. params.put("endDate",endDate);
29. params.put("pageNum", pageNum);
30. params.put("pageSize", pageSize);
31. Object result = genericService.$invoke("selectArAuditAccSensitiveSingleLogList", parameterTypes, new Object[]{params});
32. if (result != null) {
33. Map
34. return resultMap;
35. }
36. return null;
37. }
推荐阅读
发表评论