一、什么是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.    2.8.4

3.

4.

5.    

6.        org.apache.dubbo

7.        dubbo

8.        ${dubbo.version}

9.    

10.    

11.        org.apache.dubbo

12.        dubbo-dependencies-zookeeper

13.        ${dubbo.version}

14.        pom

15.    

16.

2、Provider 提供接口

1.public interface DataTableAuditManageService {

2. Result> selectArAuditAccSensitiveSingleLogList(AuditAccSensitiveSingleLogRequest request);

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> selectArAuditAccSensitiveSingleLogList(AuditAccSensitiveSingleLogRequest param) {

9.        try {

10.            return new Result>().success(auditCommonBiz.selectArAuditAccSensitiveSingleLogList(param));

11.        } catch (Exception e) {

12.            DefaultLogUtil.outputInvokeFailedMessage(param, "selectArAuditAccSensitiveSingleLogList", e, this.getClass());

13.            return new Result>().fail(BasicCode.UNKNOWN_ERROR.getCode(), e.getMessage());

14.        }

15.    }

16.}

3、Consumer 调用接口

1.   public Map doSelectArAuditAccSensitiveSingleLogList( Integer pageNum, Integer pageSize) {

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 reference = new 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 resultMap = (HashMap) result;

34.            return resultMap;

35.        }

36.        return null;

37.    }

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: