This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-docs.git
The following commit(s) were added to refs/heads/master by this push:
new 86e1b5d update bmi sample documents (#300)
86e1b5d is described below
commit 86e1b5d915c4410bf3fae672e3dc5c8cc10e12b5
Author: liubao68 <[email protected]>
AuthorDate: Mon Nov 20 17:27:46 2023 +0800
update bmi sample documents (#300)
---
.../zh_CN/docs/featured-topics/application-bmi.md | 2 +-
.../application-bmi/distributed-tracing-result.png | Bin 20091 -> 0 bytes
.../application-bmi/distributed-tracing.md | 66 ------------
.../application-bmi/flow-control-result.png | Bin 52518 -> 34217 bytes
.../application-bmi/flow-control.md | 38 +++----
.../application-bmi/gray-release-result.png | Bin 0 -> 39832 bytes
.../application-bmi/gray-release.md | 88 ++++++++++++++++
.../application-bmi/load-balance.md | 4 +-
.../application-bmi/quick-start-advance.md | 4 +-
.../application-bmi/quick-start-bmi.md | 116 +++++++++++++--------
.../featured-topics/application-bmi/quick-start.md | 14 +--
.../application-bmi/service-management-error.png | Bin 0 -> 33565 bytes
.../application-bmi/service-management-result.png | Bin 47582 -> 0 bytes
.../application-bmi/service-management.md | 59 ++++++-----
14 files changed, 214 insertions(+), 177 deletions(-)
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi.md
index 4087607..530cf49 100644
--- a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi.md
+++ b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi.md
@@ -17,4 +17,4 @@
* [体质指数微服务应用开发](application-bmi/quick-start-bmi.md)
* [微服务开发进阶](application-bmi/quick-start-advance.md)
-介绍文档的源代码托管在[github](https://github.com/apache/servicecomb-samples/tree/master/java-chassis-samples/bmi)
\ No newline at end of file
+介绍文档的源代码托管在[github](https://github.com/apache/servicecomb-samples/tree/master/bmi)
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing-result.png
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing-result.png
deleted file mode 100644
index 7e649b4..0000000
Binary files
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing-result.png
and /dev/null differ
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing.md
deleted file mode 100644
index 274cefe..0000000
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/distributed-tracing.md
+++ /dev/null
@@ -1,66 +0,0 @@
-# 分布式调用链追踪
-
-分布式调用链追踪用于有效地监控微服务的网络延时并可视化微服务中的数据流转。本指南将展示如何在 *体质指数* 应用中使用 **ServiceComb**
提供的分布式调用链追踪能力。
-
-## 前言
-
-在您进一步阅读之前,请确保您已阅读了[体质指数微服务应用开发](quick-start-bmi.md),并已成功运行体质指数微服务。
-
-## 启用
-
-* 在 *体质指数计算器* 的 `pom.xml` 文件中添加依赖项:
-
-```xml
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>handler-tracing-zipkin</artifactId>
- </dependency>
-```
-
-* 在 *体质指数计算器* 的 `application.yml` 文件中添加分布式追踪的处理链:
-
-```yaml
-servicecomb:
- handler:
- chain:
- Provider:
- default: tracing-provider
-```
-
-* 在 *体质指数界面* 的 `pom.xml` 文件中添加依赖项:
-
-```xml
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>handler-tracing-zipkin</artifactId>
- </dependency>
-```
-
-体质指数应用中已配置好了上述配置项,您只需执行以下几步即可:
-
-* 使用 Docker 运行 *Zipkin* 分布式追踪服务:
-
-```bash
-docker run -d -p 9411:9411 openzipkin/zipkin
-```
-
-* 重启 *体质指数计算器* 微服务:
-
-```bash
-mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.handler.chain.Provider.default=tracing-provider"
-```
-
-* 重启 *体质指数界面* 微服务:
-
-```bash
-mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.handler.chain.Consumer.default=loadbalance,tracing-consumer"
-```
-
-## 验证
-
-* 访问 <a>http://localhost:8889</a> ,在身高和体重栏处输入正数,并点击 *Submit* 按钮。
-
-* 访问 <a>http://localhost:9411</a> ,查看分布式调用追踪情况,可得下方界面。
-
-
-
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control-result.png
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control-result.png
index 71f9409..b2bf74c 100644
Binary files
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control-result.png
and
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control-result.png
differ
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control.md
index 6e09295..6b212c7 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/flow-control.md
@@ -1,6 +1,6 @@
# 流量控制
-流量控制机制通过控制数据传输速率来避免微服务过载运行。本指南将展示如何在 *体质指数* 应用中使用 **ServiceComb** 提供的流量控制能力。
+流量控制机制通过控制数据传输速率来避免微服务过载运行。本指南将展示如何在 *体质指数* 应用中使用流量控制能力。
## 前言
@@ -8,34 +8,20 @@
## 开启
-* 在 *体质指数计算器* 的 `pom.xml` 文件中添加依赖项:
-
-```xml
-<dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>handler-flowcontrol-qps</artifactId>
-</dependency>
-```
-
-* 在 *体质指数计算器* 的 `application.yml` 文件中指明使用流量控制的处理链及指定流控策略:
+* 在 *体质指数计算器* 的 `application.yml` 文件中指明流控策略:
```yaml
servicecomb:
- handler:
- chain:
- Provider:
- default: qps-flowcontrol-provider
- flowcontrol:
- Provider:
- qps:
- limit:
- gateway: 1
-```
-
-也可以通过环境变量的方式动态修改配置文件的值,比如采用以下指令重新运行即可:
-
-```bash
-mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.handler.chain.Provider.default=qps-flowcontrol-provider
-Dservicecomb.flowcontrol.Provider.qps.limit.gateway=1"
+ matchGroup:
+ bmi-operation: |
+ matches:
+ - apiPath:
+ exact: "/bmi"
+ rateLimiting:
+ bmi-operation: |
+ timeoutDuration: 0
+ limitRefreshPeriod: 1000
+ rate: 1
```
## 验证
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release-result.png
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release-result.png
new file mode 100644
index 0000000..572a275
Binary files /dev/null and
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release-result.png
differ
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release.md
new file mode 100644
index 0000000..4b58d16
--- /dev/null
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/gray-release.md
@@ -0,0 +1,88 @@
+# 灰度发布
+
+灰度发布存在很多不同的应用场景,包括解决版本兼容性问题、A/B Test、平滑升级等。本指南将展示如何在 *体质指数* 应用中使用灰度发布能力。
+
+## 前言
+
+在您进一步阅读之前,请确保您已阅读了[体质指数微服务应用开发](quick-start-bmi.md),并已成功运行体质指数微服务。
+
+## 启用
+
+* 首先需要进行灰度发布策略设计。 在这个实例中,将体重 >= 60 的请求转发到 0.0.2 版本, 将体重 <60 的请求转发到 0.0.1 版本。
灰度发布策略一般使用请求头进行标记,
+ 为了实现这个目的,使用 Java Chassis的Context Mapper机制,将符合请求特征的请求设置不一样的 header。
下面的配置会根据请求特性,设置 x-gray = 1, 或者
+ x-gray= 0 。
+
+>>> 注意:流量特征治理的匹配规则都是 String - String 的键值对。使用 yaml
文件配置的时候,如果涉及数字和特殊字符,需要使用引号,否则会解析为其他类型出现错误。
+
+```yaml
+servicecomb:
+ matchGroup:
+ bmi-operation: |
+ matches:
+ - apiPath:
+ exact: "/bmi"
+ bmi-operation-heavy: |
+ matches:
+ - apiPath:
+ exact: "/bmi"
+ queries:
+ weight:
+ compare: ">=60"
+ bmi-operation-thin: |
+ matches:
+ - apiPath:
+ exact: "/bmi"
+ queries:
+ weight:
+ compare: "<60"
+ mapper:
+ bmi-operation-heavy: |
+ target:
+ x-gray: "1"
+ bmi-operation-thin: |
+ target:
+ x-gray: "0"
+```
+
+* 在 *体质指数界面* 的 `application.yml` 文件中添加灰度发布策略:
+
+```yaml
+servicecomb:
+ router:
+ type: router
+ globalRouteRule: |
+ - precedence: 2
+ match:
+ headers:
+ x-gray:
+ exact: "1"
+ route:
+ - weight: 100
+ tags:
+ version: 0.0.2
+ - precedence: 1
+ match:
+ headers:
+ x-gray:
+ exact: "0"
+ route:
+ - weight: 100
+ tags:
+ version: 0.0.1
+```
+
+>>> 注意:路由控制是在消费者方。
+
+## 验证
+
+对 *体质指数计算器* 微服务进行水平扩展,使其运行实例数为2,即新增一个运行实例。 该实例的版本号是 0.0.2.
+
+```bash
+mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.rest.address=0.0.0.0:7779
-Dservicecomb.service.version=0.0.2"
+```
+
+* 访问 <a>http://localhost:8889</a> ,在身高和体重栏处输入正数,并点击 *Submit* 按钮。
+
+* 如果体重大于等于60, 请求始终转发到一个0.0.2版本实例;体重小于60, 请求会转发到0.0.1版本的实例。
+
+ 
\ No newline at end of file
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/load-balance.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/load-balance.md
index 0063f2b..7429e15 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/load-balance.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/load-balance.md
@@ -15,10 +15,10 @@
对 *体质指数计算器* 微服务进行水平扩展,使其运行实例数为2,即新增一个运行实例:
```bash
-mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=7779
-Dservicecomb.rest.address=0.0.0.0:7779"
+mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.rest.address=0.0.0.0:7779"
```
-为了便于区分不同的运行实例,在体质指数计算器的实现中新增了返回实例ID和运行时间的接口,详情可查看[体质指数计算器的完整实现代码](https://github.com/apache/servicecomb-java-chassis/tree/master/samples/bmi/calculator)。而为了避免端口冲突,新的实例在另一个端口上运行。
+为了便于区分不同的运行实例,在体质指数计算器的实现中新增了返回实例ID和运行时间的接口。而为了避免端口冲突,新的实例在另一个端口上运行。
此时点击 *Submit* 按钮就可以看到如下两个界面中的实例ID交替出现。
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-advance.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-advance.md
index 322cfeb..dd36bab 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-advance.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-advance.md
@@ -6,6 +6,6 @@
* [流量控制](flow-control.md)。限制单位时间内访问某个微服务的请求数量。
-* [服务治理](service-management.md)。在微服务应用中隔离异常服务并阻止异常传递。
+* [熔断控制](service-management.md)。在微服务应用中隔离异常服务并阻止异常传递。
-* [分布式追踪](distributed-tracing.md)。可视化微服务间的数据流转。
+* [灰度发布](gray-release.md)。对微服务进行多版本发布。
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-bmi.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-bmi.md
index 6c1e0f7..68a609f 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-bmi.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start-bmi.md
@@ -11,22 +11,24 @@ BMI主要由两个微服务组成:
在开始前,需要先在服务的父工程中添加以下依赖项:
-```java
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>java-chassis-dependencies</artifactId>
- <version>${project.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
+```xml
+
+<dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>java-chassis-dependencies</artifactId>
+ <version>${servicecomb.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+</dependencyManagement>
```
+
**注意**: `java-chassis-dependencies` 这个依赖是以pom的形式导入来统一项目中的依赖项的版本管理。
-下面将对这两个微服务的实现进行介绍,其代码已托管于[github](https://github.com/apache/servicecomb-samples/tree/master/java-chassis-samples/bmi)上。
+下面将对这两个微服务的实现进行介绍,其代码已托管于[github](https://github.com/apache/servicecomb-samples/tree/master/bmi)上。
### 体质指数计算器实现
体质指数计算器提供运算服务,其实现分为三部分:
@@ -70,10 +72,20 @@ public interface CalculatorEndpoint {
引入 **ServiceComb** 依赖:
```xml
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>java-chassis-spring-boot-starter-servlet</artifactId>
- </dependency>
+<dependencies>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>registry-service-center</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>solution-basic</artifactId>
+ </dependency>
+</dependencies>
```
暴露运算服务的Restful端点:
@@ -102,32 +114,34 @@ public class CalculatorRestEndpoint implements
CalculatorEndpoint {
如下的 `application.yml` 文件中的定义来配置端点端口,将契约和服务一起注册到服务注册中心。
```yaml
-APPLICATION_ID: bmi
-service_description:
- name: calculator
- version: 0.0.1
servicecomb:
- service:
- registry:
+ registry:
+ sc:
address: http://127.0.0.1:30100
+ service:
+ application: bmi
+ name: calculator
+ version: 0.0.1
+
rest:
address: 0.0.0.0:7777
```
-***注意***: **ServiceComb**默认的配置文件名称是`microservice.yaml`。 本应用采用 spring
boot作为运行环境,因此遵循
-spring boot的规范,配置文件名称使用 `application.yml`。
-
#### 服务启动入口
-服务启动入口中只需添加 `@EnableServiceComb` 的注解即可启用 *ServiceComb* 微服务框架,代码如下:
+服务启动入口按照[高性能模式](../../spring-boot/introduction.md) 代码如下:
```java
@SpringBootApplication
-@EnableServiceComb
public class CalculatorApplication {
public static void main(String[] args) {
- SpringApplication.run(CalculatorApplication.class, args);
+ try {
+ new
SpringApplicationBuilder().web(WebApplicationType.NONE).sources(CalculatorApplication.class).run(args);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
}
}
+
```
### 体质指数界面实现
@@ -142,27 +156,44 @@ public class CalculatorApplication {
其中,前端界面的组件使用了[Bootstrap](http://getbootstrap.com/)来开发。
#### 网关及路由规则
-网关服务使用 **ServiceComb** 提供的 [Edge
Service](http://localhost:8000/edge/by-servicecomb-sdk/) 来实现。
+网关服务使用 **ServiceComb** 提供的 [Edge Service](../../edge/by-servicecomb-sdk.md)
来实现。
引入依赖:
```xml
-<dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
-</dependency>
-<dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>edge-core</artifactId>
-</dependency>
+
+<dependencies>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>registry-service-center</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>java-chassis-spring-boot-starter-standalone</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>solution-basic</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>edge-core</artifactId>
+ </dependency>
+</dependencies>
```
在 `application.yml` 文件中配置路由规则及服务端口信息:
```yaml
-ervicecomb:
- service:
- registry:
+servicecomb:
+ registry:
+ sc:
address: http://127.0.0.1:30100
+ service:
+ application: bmi
+ name: gateway
+ version: 0.0.1
+
rest:
address: 0.0.0.0:8889
@@ -201,11 +232,10 @@ Service 采用 SPI 的方式扩展 Dispatcher, 需要创建文件 `org.apache.
#### 服务启动入口
-服务启动入口也只需要声明启用 `ServiceComb` 即可。
+服务启动入口按照[高性能模式](../../spring-boot/introduction.md) 代码如下:
```java
@SpringBootApplication
-@EnableServiceComb
public class GatewayApplication {
public static void main(String[] args) {
new
SpringApplicationBuilder().web(WebApplicationType.NONE).sources(GatewayApplication.class).run(args);
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start.md
index 7b409ee..7c61a0b 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/quick-start.md
@@ -2,17 +2,17 @@
## 安装 Java 开发环境
-*
安装**git**,详情可参考[git安装教程](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)。
+*
安装**git**,详情可参考[git安装教程](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)
。
-* 安装JDK
1.8,详情可参考[JDK安装教程](https://docs.oracle.com/javase/8/docs/technotes/guides/install/install_overview.html)。
+* 安装JDK
17,详情可参考[JDK安装教程](https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html)
。
-* 安装Maven 3.x,详情可参考[Maven安装教程](https://maven.apache.org/install.html)。
+* 安装Maven 3.x,详情可参考[Maven安装教程](https://maven.apache.org/install.html) 。
-* 下载ServiceComb-Sample
+* 下载 BMI 例子
```bash
git clone https://github.com/apache/servicecomb-samples.git
-cd servicecomb-samples/java-chassis-samples/bmi
+cd servicecomb-samples/bmi
mvn clean install
```
@@ -24,14 +24,14 @@ docker pull servicecomb/service-center
docker run -d -p 30100:30100 servicecomb/service-center:latest
```
-*您可以通过阅读[环境安装](http://servicecomb.apache.org/docs/products/service-center/install/)获取在本地以二进制方式运行Service
Center的方法。*
+*您可以通过阅读[环境安装](http://servicecomb.apache.org/docs/products/service-center/install/)
获取在本地以二进制方式运行Service Center的方法。*
## 运行微服务应用
* 进入 **体质指数** 应用代码目录。
```bash
-cd servicecomb-samples/java-chassis-samples/bmi
+cd servicecomb-samples/bmi
```
**注意**:在windows开发环境下,docker是在虚拟机中启动,因此需要修改微服务的 **Service Center**
IP地址为虚拟机IP地址。修改2个配置文件[calculator\|webapp]/src/main/resources/application.yml,将其中<a>http://127.0.0.1:30100</a>修改为<a>http://192.168.99.100:30100</a>,其中192.168.99.100是虚拟机IP,需要与开发环境中的虚拟机IP保持一致。
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-error.png
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-error.png
new file mode 100644
index 0000000..c421238
Binary files /dev/null and
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-error.png
differ
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-result.png
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-result.png
deleted file mode 100644
index c01ade8..0000000
Binary files
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management-result.png
and /dev/null differ
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management.md
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management.md
index 9f7f191..5a31550 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management.md
+++
b/java-chassis-reference/zh_CN/docs/featured-topics/application-bmi/service-management.md
@@ -1,6 +1,6 @@
-# 服务治理
+# 熔断控制
-服务治理主要用于解决或缓解服务雪崩的情况,即个别微服务表现异常时,系统能对其进行容错处理,从而避免资源的耗尽。本指南将会展示如何在 *体质指数* 应用中使用
**ServiceComb** 提供的服务治理能力。
+熔断控制主要用于解决或缓解服务雪崩的情况,即个别微服务表现异常时,系统能对其进行容错处理。本指南将会展示如何在 *体质指数* 应用中使用熔断控制能力。
## 前言
@@ -8,44 +8,43 @@
## 启用
-* 在 *体质指数计算器* 的 `pom.xml` 文件中添加依赖项:
-
-```xml
- <dependency>
- <groupId>org.apache.servicecomb</groupId>
- <artifactId>handler-bizkeeper</artifactId>
- </dependency>
-```
-
-* 在 *体质指数计算器* 的 `application.yml` 文件中指明使用服务治理的处理链及指定熔断和容错策略:
+* 在 *体质指数界面* 的 `application.yml` 文件中指明使用服务治理的处理链及指定熔断和容错策略:
```yaml
servicecomb:
- handler:
- chain:
- Provider:
- default: bizkeeper-provider
- circuitBreaker:
- Provider:
- calculator:
- requestVolumeThreshold: 3
- fallbackpolicy:
- Provider:
- policy: returnNull
+ matchGroup:
+ bmi-operation: |
+ matches:
+ - apiPath:
+ exact: "/bmi"
+ instanceIsolation:
+ bmi-operation: |
+ minimumNumberOfCalls: 5
+ slidingWindowSize: 10
+ slidingWindowType: COUNT_BASED
+ failureRateThreshold: 50
+ slowCallRateThreshold: 100
+ slowCallDurationThreshold: 3000
+ waitDurationInOpenState: 10000
+ permittedNumberOfCallsInHalfOpenState: 10
+
```
-也可以通过环境变量的方式动态修改配置文件的值,比如采用以下指令重新运行即可:
+>>> 注意:熔断控制是在消费者方。
+
+## 验证
+
+对 *体质指数计算器* 微服务进行水平扩展,使其运行实例数为2,即新增一个运行实例:
```bash
-mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.handler.chain.Provider.default=bizkeeper-provider
-Dservicecomb.circuitBreaker.Provider.calculator.requestVolumeThreshold=3
-Dservicecomb.fallbackpolicy.Provider.policy=returnNull"
+mvn spring-boot:run
-Dspring-boot.run.jvmArguments="-Dservicecomb.rest.address=0.0.0.0:7779
-Dbmi.mock.error=true"
```
-## 验证
+* 访问 <a>http://localhost:8889</a> 。
输出身高和体重,连续点击几次提交,可以看到界面交替出现正常和错误界面。这是因为在其中一个实例里面构造了故障。
-* 使服务进入熔断状态。访问 <a>http://localhost:8889</a>,在身高或体重的输入框中输入一个负数,连续点击三次或以上
*Submit* 按钮,此时在网页下方能看到类似左图的界面。
+ 
-* 验证服务处于熔断状态。在身高和体重的输入框中输入正数,再次点击 *Submit* 按钮,此时看到的界面依然是类似左图的界面。同时在 *体质指数计算器*
运行日志也能看到调用不再抛出异常,而是出现类似 `fallback called` 的日志。
+* 继续点击界面,经过10次以后,发现故障实例被熔断。不再出现错误,所有的请求都被正常实例处理。每间隔10秒,会尝试往故障实例发生若干请求。
-* 验证服务恢复正常。约15秒后,在身高和体重的输入框中输入正数,点击 *Submit* 按钮,此时界面显示正常。
+* 验证服务恢复正常。重启故障实例,不注入故障。 可以看到所有的请求都被正常处理,而且请求均匀的分布在两个正常实例。
- 