1. RPC调用流程
具体调用过程:
- 服务消费者(client客户端)通过本地调用的方式调用服务。
- 客户端存根(client stub)接收到请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体。
- 客户端存根(client stub)找到远程的服务地址,并且将消息通过网络发送给服务端。
- 服务端存根(server stub)收到消息后进行解码(反序列化操作)。
- 服务端存根(server stub)根据解码结果调用本地的服务进行相关处理。
- 本地服务执行具体业务逻辑并将处理结果返回给服务端存根(server stub)。
- 服务端存根(server stub)将返回结果重新打包成消息(序列化)并通过网络发送至消费方。
- 客户端存根(client stub)接收到消息,并进行解码(反序列化)。
- 服务消费方得到最终结果。
2. Dubbo与Spring Cloud集成演示
-
集成搭建配置
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>
-
Dubbo Rpc调用演示
- 启动服务端:rpc-dubbo-provider
- 启动客户端:rpc-dubbo-consumer
- 访问测试接口: http://127.0.0.1:18080/placeOrder
-
限流熔断测试:
启动sentinel服务,启动命令java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -jar D:/TestCode/sentinel-dashboard-1.6.3.jar
-
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即可。 - 降级配置:
-
限流测试
修改限流规则, 将并发数改为2。 访问接口:http://127.0.0.1:18080/placeOrder?userName=test
触发限流:
-
降级测试:
恢复限流规则, 将并发数改为20;修改降级配置, 将异常比例改为0.2(百分二十)。
访问异常接口地址:http://127.0.0.1:18080/placeOrder?userName=error
快速多次访问后, 会触发降级:
本文由mirson创作分享,如需进一步交流,请加QQ群:19310171或访问www.softart.cn