RPC实现原理之Dubbo与SpringCloud集成实践

1. RPC调用流程

file

具体调用过程:

  1. 服务消费者(client客户端)通过本地调用的方式调用服务。
  2. 客户端存根(client stub)接收到请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
  3. 客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
  4. 服务端存根(server stub)收到消息后进行解码(反序列化操作)。
  5. 服务端存根(server stub)根据解码结果调用本地的服务进行相关处理。
  6. 本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub)。
  7. 服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方。
  8. 客户端存根(client stub)接收到消息,并进行解码(反序列化)。
  9. 服务消费方得到最终结果。

2. Dubbo与Spring Cloud集成演示

  1. 集成搭建配置
    POM依赖:

    <parent>
        <!-- Spring Boot 父级依赖 -->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/>
    </parent>
    <name>rpc-dubbo</name>
    <description>rpc-dubbo</description>
    <packaging>pom</packaging>
    
    <modules>
        <module>rpc-dubbo-api</module>
        <module>rpc-dubbo-consumer</module>
        <module>rpc-dubbo-provider</module>
    </modules>
    
    <!-- 公用版本属性配置 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
    </properties>
    
    <!-- Spring Cloud组件依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
    <!-- 核心组件依赖 -->
    <dependencies>
        <!-- Spring Boot 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Dubbo Spring Cloud 集成依赖组件 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!-- Spring Cloud Nacos 服务依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- lombok 代码插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    
  2. Dubbo Rpc调用演示

    • 启动服务端:rpc-dubbo-provider
    • 启动客户端:rpc-dubbo-consumer
    • 访问测试接口: http://127.0.0.1:18080/placeOrder
  3. 限流熔断测试:
    启动sentinel服务,启动命令

    java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090  -jar D:/TestCode/sentinel-dashboard-1.6.3.jar
    
  4. Nacos Sentinel配置:

    • 降级配置:
      sentinel-degrade为降级配置策略, 内容:
    [
      {
        "resource": "placeOrder",
        "count": 0.2,
        "grade": 1,    
        "timeWindow": 4
      }
    ]
    

    resource: 为资源名称。
    count: 为百分比[0-1], 这里代表20%
    grade: 为降级策略, 0: 代表响应时间, 1: 代表异常比例, 2: 代表异常数量, 这里采用的是异常比。
    timeWindow:为时间窗, 单位为秒。

    • 限流配置:
      sentinel-flow为限流配置策略,内容:
    [
       {
        "resource": "placeOrder",
        "controlBehavior": 0,
        "count": 2,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0
      }
    ]
    

    resource: 为资源名称。
    controlBehavior:流量整形的控制效果,目前支持快速失败和匀速排队两种模式,默认是0, 快速失败。
    count: 线程数量。
    grade:限流配置策略, 0:代表线程数量, 1:代表QPS并发数。
    limitApp: 限流针对的来源, 填写default即可。

  5. 限流测试

    修改限流规则, 将并发数改为2。 访问接口:http://127.0.0.1:18080/placeOrder?userName=test

    触发限流:
    file

  6. 降级测试:

    恢复限流规则, 将并发数改为20;修改降级配置, 将异常比例改为0.2(百分二十)。

    访问异常接口地址:http://127.0.0.1:18080/placeOrder?userName=error

    快速多次访问后, 会触发降级:
    file


本文由mirson创作分享,如需进一步交流,请加QQ群:19310171或访问www.softart.cn

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦神-mirson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值