Dubbo3源码解读(一) 阅读环境准备

本文介绍了如何准备Dubbo3源码的阅读环境,包括从GitHub获取源码、在IDEA中构建项目、启动Zookeeper实例,以及运行dubbo-demo模块的Spring Boot示例,通过启动服务提供者和消费者模块,成功消费sayHello服务。
摘要由CSDN通过智能技术生成

Dubbo3源码解读(一) 阅读环境准备

1. 源码获取

github git@github.com:apache/dubbo.git

2. 环境构建

  1. 在idea中打开项目

  2. 位于项目根目录进行mvn编译

    mvn clean install -DskipTests
    
  3. 启动本地zookeeper实例

    sudo zkService.start
    

3. 跑个Demo看看吧

确保启动好zookeeper并确定在2181端口上暴露服务后,我们执行其dubbo-demo模块中的dubbo-demo-spring-boot这个demo尝试用springboot启动服务。

我们来看一下dubbo-demo-spring-boot这个模块的目录结构
在这里插入图片描述
可以看到是由

  1. 消费者模块
  2. 服务提供者模块
  3. 公共接口模块构成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dubbo的请求超时源码主要涉及到以下几个部分: 1. 超时参数的设置 在Dubbo中,请求超时时间可以通过`timeout`参数进行设置。该参数默认值为`1000`毫秒。在服务提供者和消费者端,Dubbo框架会通过`Invoker`接口的实现类`AbstractInvoker`来获取`timeout`参数的值,并将其转化为`long`类型的`timeout`属性。在`AbstractInvoker`的`invoke`方法中,会将`timeout`属性作为参数传递给`AsyncRpcResult`类的构造方法,以便在异步调用的过程中使用。 2. 请求超时的处理 在Dubbo中,请求超时的处理是通过`TimeoutFilter`过滤器实现的。该过滤器会对服务消费者发起的请求进行拦截,并在指定的时间内检查请求是否已经得到响应。如果请求超时,`TimeoutFilter`会抛出`RpcException`异常,并将异常信息返回给服务消费者。在`TimeoutFilter`的`invoke`方法中,首先会获取`timeout`属性的值,并将其转化为`long`类型的`timeout`变量。然后,通过`RpcContext`类的`isAsync`方法判断当前是否为异步调用。如果是异步调用,则会创建`TimeoutTask`类的实例,并将其提交到线程池中进行执行。`TimeoutTask`类的`run`方法中,会检查当前请求是否已经得到响应,如果超时则抛出`RpcException`异常。 在服务提供者端,Dubbo框架通过`Invoker`接口的实现类`AbstractInvoker`来获取`timeout`参数的值,并将其转化为`long`类型的`timeout`属性。在`AbstractInvoker`的`invoke`方法中,会将`timeout`属性作为参数传递给`RpcContext`类的`set`方法,并将`RpcContext`对象绑定到当前线程中。在服务提供者端,超时的处理主要是通过`RpcContext`类的`get`方法来判断当前请求是否已经超时。如果请求已经超时,则会抛出`RpcException`异常。 3. 超时时间的计算 在Dubbo中,超时时间的计算主要是通过`RpcContext`类的`get`和`set`方法实现的。在服务提供者端,Dubbo框架会在接收到请求后,通过`RpcContext`类的`set`方法将当前时间戳保存到`startTime`属性中。在服务消费者端,Dubbo框架会在发起请求之前,通过`RpcContext`类的`set`方法将当前时间戳保存到`requestTime`属性中。在`TimeoutFilter`过滤器中,会通过`RpcContext`类的`get`方法获取`requestTime`和`startTime`属性的值,并通过计算得到当前请求的超时时间。同时,`TimeoutFilter`还会通过`RpcContext`类的`set`方法将当前请求的超时时间保存到`timeout`属性中,以便在异步调用的过程中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值