关于java:RPC实现原理之Dubbo与SpringCloud集成实践

75次阅读

共计 3261 个字符,预计需要花费 9 分钟才能阅读完成。

1. RPC 调用流程

具体调用过程:

  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

    触发限流:

  6. 降级测试:

    复原限流规定,将并发数改为 20;批改降级配置,将异样比例改为 0.2(百分二十)。

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

    疾速屡次拜访后,会触发降级:

正文完
 0