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 330602c update some contents structure (#348)
330602c is described below
commit 330602cca8a0dba06462a873483c31bed180dc20
Author: liubao68 <[email protected]>
AuthorDate: Sat Jul 27 16:14:05 2024 +0800
update some contents structure (#348)
---
.../featured-topics/{features => }/date-time.md | 0
.../zh_CN/docs/featured-topics/features.md | 4 -
.../{features => }/http-dispatcher.md | 2 +-
.../zh_CN/docs/featured-topics/secrets.md | 16 --
.../zh_CN/docs/featured-topics/upgrading.md | 3 -
.../secrets/api-first-flow.png | Bin
.../{featured-topics => }/secrets/api-first.md | 0
.../secrets/applied-config.md | 0
.../secrets/circuit-breaker.md | 0
.../secrets/fail-fast-rate-limiting.png | Bin
.../{featured-topics => }/secrets/fail-fast.md | 0
.../secrets/interoperability-scen.png | Bin
.../secrets/interoperability.md | 0
.../secrets/load-balancer-operation.md | 0
.../secrets/load-balancer-selector-empty.png | Bin
.../secrets/load-balancer-selector-normal.png | Bin
.../secrets/load-balancer-selector.png | Bin
.../{featured-topics => }/secrets/load-balancer.md | 0
.../secrets/load-blancer-operation.png | Bin
.../{featured-topics => }/secrets/observability.md | 0
.../secrets/observability.png | Bin
.../{featured-topics => }/secrets/registries.md | 0
.../secrets/serialization-arch.png | Bin
.../secrets/serialization-case.png | Bin
.../{featured-topics => }/secrets/serialization.md | 0
.../docs/{featured-topics => }/secrets/sse.md | 0
.../{featured-topics => }/secrets/websocket.md | 0
.../secrets/zone-isolation-az.png | Bin
.../secrets/zone-isolation-ping.png | Bin
.../secrets/zone-isolation-status.png | Bin
.../secrets/zone-isolation.md | 0
.../secrets/zookeeper-scale.png | Bin
.../{featured-topics => }/secrets/zookeeper.md | 0
.../zh_CN/docs/upgrading/1_3_0T2_0_0.md | 314 +++++++++++++++++++++
.../zh_CN/docs/upgrading/2_0_0T2_0_1.md | 13 +
.../zh_CN/docs/upgrading/2_0_1T2_1_0.md | 106 +++++++
.../zh_CN/docs/upgrading/2_1_0T2_1_1.md | 16 ++
.../zh_CN/docs/upgrading/2_1_1T2_1_5.md | 61 ++++
.../zh_CN/docs/upgrading/2_1_5T2_6_0.md | 45 +++
.../zh_CN/docs/upgrading/2_6_0T2_8_0.md | 12 +
.../{featured-topics => }/upgrading/2_8_0T3_0_0.md | 0
java-chassis-reference/zh_CN/mkdocs.yml | 29 +-
42 files changed, 593 insertions(+), 28 deletions(-)
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/features/date-time.md
b/java-chassis-reference/zh_CN/docs/featured-topics/date-time.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/features/date-time.md
rename to java-chassis-reference/zh_CN/docs/featured-topics/date-time.md
diff --git a/java-chassis-reference/zh_CN/docs/featured-topics/features.md
b/java-chassis-reference/zh_CN/docs/featured-topics/features.md
deleted file mode 100644
index 15a6e0a..0000000
--- a/java-chassis-reference/zh_CN/docs/featured-topics/features.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# 特性介绍
-
-* [特性介绍: date和date-time](features/date-time.md)
-* [特性介绍: Edge Service 通用的 HTTP 转发器
CommonHttpEdgeDispatcher](features/http-dispatcher.md)
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/features/http-dispatcher.md
b/java-chassis-reference/zh_CN/docs/featured-topics/http-dispatcher.md
similarity index 96%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/features/http-dispatcher.md
rename to java-chassis-reference/zh_CN/docs/featured-topics/http-dispatcher.md
index b741d46..8979b40 100644
---
a/java-chassis-reference/zh_CN/docs/featured-topics/features/http-dispatcher.md
+++ b/java-chassis-reference/zh_CN/docs/featured-topics/http-dispatcher.md
@@ -44,7 +44,7 @@ servicecomb:
## CommonHttpEdgeDispatcher 的治理
-CommonHttpEdgeDispatcher 集成了 loadbalance 模块提供的治理能力, 在
[负载均衡](../../references-handlers/loadbalance.md) 里面的治理
+CommonHttpEdgeDispatcher 集成了 loadbalance 模块提供的治理能力, 在
[负载均衡](../references-handlers/loadbalance.md) 里面的治理
能力都可以使用,除了 `设置重试策略` 。 这个转发器通常被用于转发 UI 请求到后端的静态页面服务,以及遗留的使用 spring
boot 开发的微服务, 或者采用 spring-cloud-huawei 接入服务中心的 spring cloud 微服务应用。
diff --git a/java-chassis-reference/zh_CN/docs/featured-topics/secrets.md
b/java-chassis-reference/zh_CN/docs/featured-topics/secrets.md
deleted file mode 100644
index 84c317b..0000000
--- a/java-chassis-reference/zh_CN/docs/featured-topics/secrets.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# 技术解密
-
-* [Java Chassis 3技术解密:负载均衡选择器](secrets/load-balancer.md)
-* [Java Chassis 3技术解密:注册中心分区隔离](secrets/zone-isolation.md)
-* [Java Chassis 3技术解密:多种序列化方式支持](secrets/serialization.md)
-* [Java Chassis 3技术解密:熔断机制的改进路程](secrets/circuit-breaker.md)
-* [Java Chassis 3技术解密:过载状态下的快速失败](secrets/fail-fast.md)
-* [Java Chassis 3技术解密:应用视角的配置管理](secrets/applied-config.md)
-* [Java Chassis 3技术解密:易扩展的多种注册中心支持](secrets/registries.md)
-* [Java Chassis 3技术解密:与Spring Cloud的互操作](secrets/interoperability.md)
-* [Java Chassis 3技术解密:ZooKeeper注册和配置中心](secrets/zookeeper.md)
-* [Java Chassis 3技术解密:契约优先(API First)开发](secrets/api-first.md)
-* [Java Chassis 3技术解密:接口维度负载均衡](secrets/load-balancer-operation.md)
-* [Java Chassis 3技术解密:实用的可观测性](secrets/observability.md)
-* [Java Chassis 3技术解密:流式响应和人工智能应用开发](secrets/sse.md)
-* [Java Chassis 3技术解密:WebSocket和人工智能应用开发](secrets/websocket.md)
diff --git a/java-chassis-reference/zh_CN/docs/featured-topics/upgrading.md
b/java-chassis-reference/zh_CN/docs/featured-topics/upgrading.md
deleted file mode 100644
index aa9442d..0000000
--- a/java-chassis-reference/zh_CN/docs/featured-topics/upgrading.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 升级指导
-
-* [2.8.x 升级 3.0.0指导](upgrading/2_8_0T3_0_0.md)
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/api-first-flow.png
b/java-chassis-reference/zh_CN/docs/secrets/api-first-flow.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/api-first-flow.png
rename to java-chassis-reference/zh_CN/docs/secrets/api-first-flow.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/api-first.md
b/java-chassis-reference/zh_CN/docs/secrets/api-first.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/api-first.md
rename to java-chassis-reference/zh_CN/docs/secrets/api-first.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/applied-config.md
b/java-chassis-reference/zh_CN/docs/secrets/applied-config.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/applied-config.md
rename to java-chassis-reference/zh_CN/docs/secrets/applied-config.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/circuit-breaker.md
b/java-chassis-reference/zh_CN/docs/secrets/circuit-breaker.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/circuit-breaker.md
rename to java-chassis-reference/zh_CN/docs/secrets/circuit-breaker.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/fail-fast-rate-limiting.png
b/java-chassis-reference/zh_CN/docs/secrets/fail-fast-rate-limiting.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/fail-fast-rate-limiting.png
rename to java-chassis-reference/zh_CN/docs/secrets/fail-fast-rate-limiting.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/fail-fast.md
b/java-chassis-reference/zh_CN/docs/secrets/fail-fast.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/fail-fast.md
rename to java-chassis-reference/zh_CN/docs/secrets/fail-fast.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability-scen.png
b/java-chassis-reference/zh_CN/docs/secrets/interoperability-scen.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability-scen.png
rename to java-chassis-reference/zh_CN/docs/secrets/interoperability-scen.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md
b/java-chassis-reference/zh_CN/docs/secrets/interoperability.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/interoperability.md
rename to java-chassis-reference/zh_CN/docs/secrets/interoperability.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-operation.md
b/java-chassis-reference/zh_CN/docs/secrets/load-balancer-operation.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-operation.md
rename to java-chassis-reference/zh_CN/docs/secrets/load-balancer-operation.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector-empty.png
b/java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector-empty.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector-empty.png
rename to
java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector-empty.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector-normal.png
b/java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector-normal.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector-normal.png
rename to
java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector-normal.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector.png
b/java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer-selector.png
rename to java-chassis-reference/zh_CN/docs/secrets/load-balancer-selector.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer.md
b/java-chassis-reference/zh_CN/docs/secrets/load-balancer.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-balancer.md
rename to java-chassis-reference/zh_CN/docs/secrets/load-balancer.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-blancer-operation.png
b/java-chassis-reference/zh_CN/docs/secrets/load-blancer-operation.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/load-blancer-operation.png
rename to java-chassis-reference/zh_CN/docs/secrets/load-blancer-operation.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/observability.md
b/java-chassis-reference/zh_CN/docs/secrets/observability.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/observability.md
rename to java-chassis-reference/zh_CN/docs/secrets/observability.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/observability.png
b/java-chassis-reference/zh_CN/docs/secrets/observability.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/observability.png
rename to java-chassis-reference/zh_CN/docs/secrets/observability.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/registries.md
b/java-chassis-reference/zh_CN/docs/secrets/registries.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/registries.md
rename to java-chassis-reference/zh_CN/docs/secrets/registries.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization-arch.png
b/java-chassis-reference/zh_CN/docs/secrets/serialization-arch.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization-arch.png
rename to java-chassis-reference/zh_CN/docs/secrets/serialization-arch.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization-case.png
b/java-chassis-reference/zh_CN/docs/secrets/serialization-case.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization-case.png
rename to java-chassis-reference/zh_CN/docs/secrets/serialization-case.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization.md
b/java-chassis-reference/zh_CN/docs/secrets/serialization.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/serialization.md
rename to java-chassis-reference/zh_CN/docs/secrets/serialization.md
diff --git a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/sse.md
b/java-chassis-reference/zh_CN/docs/secrets/sse.md
similarity index 100%
rename from java-chassis-reference/zh_CN/docs/featured-topics/secrets/sse.md
rename to java-chassis-reference/zh_CN/docs/secrets/sse.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/websocket.md
b/java-chassis-reference/zh_CN/docs/secrets/websocket.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/websocket.md
rename to java-chassis-reference/zh_CN/docs/secrets/websocket.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-az.png
b/java-chassis-reference/zh_CN/docs/secrets/zone-isolation-az.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-az.png
rename to java-chassis-reference/zh_CN/docs/secrets/zone-isolation-az.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-ping.png
b/java-chassis-reference/zh_CN/docs/secrets/zone-isolation-ping.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-ping.png
rename to java-chassis-reference/zh_CN/docs/secrets/zone-isolation-ping.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-status.png
b/java-chassis-reference/zh_CN/docs/secrets/zone-isolation-status.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation-status.png
rename to java-chassis-reference/zh_CN/docs/secrets/zone-isolation-status.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation.md
b/java-chassis-reference/zh_CN/docs/secrets/zone-isolation.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zone-isolation.md
rename to java-chassis-reference/zh_CN/docs/secrets/zone-isolation.md
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zookeeper-scale.png
b/java-chassis-reference/zh_CN/docs/secrets/zookeeper-scale.png
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zookeeper-scale.png
rename to java-chassis-reference/zh_CN/docs/secrets/zookeeper-scale.png
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/secrets/zookeeper.md
b/java-chassis-reference/zh_CN/docs/secrets/zookeeper.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/secrets/zookeeper.md
rename to java-chassis-reference/zh_CN/docs/secrets/zookeeper.md
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/1_3_0T2_0_0.md
b/java-chassis-reference/zh_CN/docs/upgrading/1_3_0T2_0_0.md
new file mode 100644
index 0000000..eaa3f97
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/1_3_0T2_0_0.md
@@ -0,0 +1,314 @@
+# 1.3.0 升级 2.0.0指导
+
+2.0.0 版本实现了 [弱类型契约](../features/weak-type-contrast.md)。
+总体而言,对于 `REST` 通信模式, 弱类型契约不仅增强了写代码的灵活性, 还完整保留了强类型契约的写代码方式,几乎不
+存在用户需要感知的变更。 对于 `HIGHWAY` 通信模式, 由于底层采用 ProtoBuffer 编码, 而 ProtoBuffer 天然就是一种
+强类型契约的编解码过程, java-chassis 为了支持弱类型契约, 做了大量努力, 在一些边界条件处理上与弱类型契约存在
+变更,两个版本的编解码是不兼容的,需要同时升级提供者和消费者。 在编码方式上,差异主要体现在对于缺省值的处理,对于
+`null` 的处理等问题上。
+
+## Highway通信协议的变更
+
+Highway通信协议是2.0.0最大的变更点。如果业务采用了Highway通信协议,需要确保所有相关的consumer
+和provider都必须升级,低版本的consumer和高版本的provider之间无法直接通信。此外,从代码风格的层面,
+还有如下一些变更。
+
+ 1. 空字符串和null的传输:protoBuffer 协议对空字符串和null都序列化为空,反序列化的结果都是null。
+ 应用程序的业务逻辑不应该使用空字符串和null表达不同语义。尽管对于REST,程序底层支持这样的区分,
+ 仍然不建议将业务逻辑构筑在这个假设之上,避免后期升级和兼容陷阱。
+ 2. 如果请求参数或者返回值是一个POJO,假设Person,REST可以返回null,但是HIGHWAY始终会创建一个
+ Person 对象返回。业务逻辑尽可能不要依赖于null对象提供语义。
+ 3. 在contrast first编程模式情况下,用户先写契约,然后通过契约生成代码,并将契约文件放
+ 到 `microservices/{microservice name}/{schema id}.yaml` 文件中,这种情况下不会通过代码生成
+ 契约。通常通过工具生成代码,工具生成的数据类型和契约的数据类型匹配,但是如果这种场景的代码经过
+ 修改,并且yaml中的数据类型是number,而代码中的类型是Integer,在HIGHWAY通信模式下会报告错误。
+ HIGHWAY 会将 number 类型解析为 protoBuffer 的 double 类型, 对应的 JAVA 类型为 double。
+ protoBuffer 不支持将Integer类型采用Double的方式序列化。在contract first编程模式下,建议通过
+ 生成工具生成代码,这样用户就不用了解swagger数据类型和JAVA数据类型映射的细节,避免一些陷阱。
+ 4. HIGHWAY 的数据类型定义不支持一些特殊字符串,比如 `H.264` 和 `MPEG-2` 在OPEN API里面是合法的
+ 参数名称,但是在 protoBuffer 里面是不合法的参数名称。带有"."和"-"的参数名字不能用于 HIGHWAY。
+ 如果存在,第一次访问这个接口的时候,会报告:
+ `io.protostuff.compiler.parser.ParserException: Could not parse syntax`
异常。
+ 5. 对于 ENUM 有一个需要特别注意的地方,protoBuffer 采用int来序列化 ENUM ,int的默认值(即0)不会序列化,那么反
+ 序列化的时候,ENUM 的缺省值必须为第一个值。应用程序需要将null和第一个缺省值当成一样的语义对待。比
+ 较好的做法是在程序里面显示的给 ENUM 字段赋缺省值。
+ 6. HIGHWAY 不支持数组参数存在 null 值的情况。如果一个接口的参数是String[],那么里面的元素不能
+ 为 null,否则序列化和反序列化会失败。
+ 7. 对于 primitive 类型,并且接口声明为 @Required,由于 HIGHWAY 并不会序列化缺省值,比如 0 等,
+ 在Consumer端传递的参数值为 0 的时候,Provider 端并不能区分这个值是传递了0,还是没有传递。因
+ 此 HIGHWAY 会忽略 @Required 声明,使用缺省值0。
+ 8. 如果一个属性的名称采用一个小写字母开头,并且只有一个小写字母,即使生成的getter/setter是合法
+ 的, swagger 生成的属性名称还是会出现错误。应该尽可能避免使用这样的属性名称。必须使用的场景,需要
+ 显示的使用 @JsonProperty 声明。
+
+ ```java
+ public class SpecialNameModel {
+ // names starts with only one lower case , although
getter/setter generated by IDE is correct,
+ // will cause jackson generate incorrect swagger names.
+ // @JsonProperty must be used to make json work in a predictable
way.
+ @JsonProperty("aIntName")
+ private int aIntName;
+
+ public int getaIntName() {
+ return aIntName;
+ }
+
+ public void setaIntName(int aIntName) {
+ this.aIntName = aIntName;
+ }
+ }
+ ```
+
+ 9. 返回多种类型或者通过 ContextUtils 设置状态码 HIGHWAY 不再支持。 尽管 1.3.0 之前用户也不会在 HIGHWAY 模式下
+ 使用类似下面的代码, 但是在 1.3.0 之前的版本, 这些代码部分确实能够工作。
+
+ ```java
+ @PUT
+ public String sayHi(@PathParam("name") String name) {
+ ContextUtils.getInvocationContext().setStatus(202);
+ return name + " sayhi";
+ }
+ ```
+
+
+***优秀实践***:
+
+如果项目中需要同时使用 REST 和 HIGHWAY 对外提供服务, 并且会使用到一些 HIGHWAY 协议有差异的用法,
+可以将这些接口定义到不同的类中, 使用不一样的 Schema ID 进行区分,比如 `MySchemaHighwayOnly` ,
+`MySchemaRestOnly` , `MySchema` 。
+
+## 使用 Edge Service 场景下 Model 的缺省值
+
+假设业务应用采用 Edge Service 转发请求。 并且定义了一个接口, 有如下 Model 作为参数:
+
+```java
+public class Person {
+ private Integer age = 30;
+ private List<String> items;
+}
+```
+
+用户从浏览器调用这个接口, JSON 内容为 `{}` , 不传递任何内容, 1.3.0 版本得到的 age = null, items = null 。
+2.0.0 版本 age = 30, items 为空表, 不为 null 。 这个行为是由于 1.3.0 版本 Edge Service 会自动生成一个
Person
+类, 这个类没有缺省值, Edge Service 重新序列化, 造成服务端取到了 null。 弱类型契约没有中间类型, 序列化的结果
+和用户从浏览器传递过来的值一样。
+
+
+## RestTemplate的使用
+
+对于下面的 consumer 和 provider 代码:
+
+```
+// provider
+@PostMapping(path = "/object")
+public Object testObject(@RequestBody Object input)
+
+// consumer
+Object result = restTemplate.postForObject(prefix + "/object",
+ new EmptyObject(), EmptyObject.class);
+```
+
+1.3.0 版本返回的 result 类型为 Map。 2.0.0 版本返回的类型和 postForObject 指定的类型一致,上面的示例
+中,result 类型为 EmptyObject。
+
+下面的代码,1.3.0 和 2.0.0 版本运行的结果是一样的:
+
+```
+List<GenericObjectParam<List<RecursiveObjectParam>>> response =
consumers.getSCBRestTemplate()
+ postForObject("/testListObjectParam", request, List.class);
+```
+
+前提条件是 GenericObjectParam 和 RecursiveObjectParam 在 consumer 的 classpath 中存在对应的
+类,并且 package 和服务端定义的类一样。如果不一样, 则 response 类型为 List<Map>,上面的代码会
+抛出类型转换异常。2.0.0 没有相同 package 的约束,并且在保持兼容的情况下,支持下面的用法:
+
+```
+HttpEntity<SpringmvcBasicRequestModel> requestEntity = new
HttpEntity<>(requestModel, null);
+List<SpringmvcBasicResponseModel> responseModelList =
+ template.exchange("/postListObject", HttpMethod.POST, requestEntity,
+ new ParameterizedTypeReference<List<SpringmvcBasicResponseModel>>() {
+ }).getBody();
+```
+
+这种方式的语义根据清晰,在使用泛型的时候,建议采用这种用法。
+
+在1.3.0版本支持如下用法:
+
+```java
+template.postForEntity(url,
+ "{\"time\":3073113710456,\"date\":3073113710456,\"holder\":\"test\"}",
+ DateTimeModel.class)
+```
+
+即通过 JSON String 的方式传递参数给后台的 DateTimeModel 对象。 由于这种用法在解析的时候存在二义性, 2.0.0
+不再支持这种用法。 可以使用 Map 或者 JsonObject 来传递。
+
+## AsyncRestTemplate的使用
+
+1.3.0 和 2.0.0 中 AsyncRestTemplate 的使用方式一样,没有变化。但是由于 2.0.0 只支持spring 5版
+本,而 spring 5 将 AsyncRestTemplate 标记为废弃状态,开发者在后续开发过程中尽可能不要使
+用 AsyncRestTemplate 。可以使用 CompletableFuture 来替代,可以参考这
+个[例子](https://github.com/apache/servicecomb-samples/pull/41/files)。
+
+## Spring Boot 集成的变化
+
+2.0.0 不再支持 spring 4 和 spring boot 1, 缺省使用 spring 5 和 spring boot 2, 并修改了相
+关 starters 的名称。 可以通过阅
+读 [在Spring Boot中使用java
chassis](../../using-java-chassis-in-spring-boot/using-java-chassis-in-spring-boot.md)
了解
+相关变化。
+
+## 支持 JDK 11
+
+2.0.0 版本可以在 JDK 11 下运行,并进行了简单的集成测试。 2.0.0 支持的核心 JDK 版本仍然是 8, 并没有采用 JDK 11 编译。
+JDK 11 的一个主要变化是后续可能不再支持通过反射改变类的封装性。 这个特性目前有很多地方使用, 2.0.0 版本为了适配 JDK 11,
+某些特性的使用会发生变化。 具体有如下几个特性 :
+
+* 使用 EventManager 注册事件
+
+在 1.3.0 版本, 允许采用 private 类 或者 内部匿名类作为事件监听对象, 比如:
+
+```java
+public void myMethod() {
+ Object receiveEvent = new Object() {
+ @Subscribe
+ public void onEvent(AlarmEvent circutBreakerEvent) {
+ taskList.add(circutBreakerEvent);
+ }
+ };
+ EventManager.getEventBus().register(receiveEvent);
+}
+```
+
+在 2.0.0 版本不允许,启动的时候会报告异常。 2.0.0 版本注册的事件监听器,必须保证对于 EventManager 类具有可访问性。 通常
+定义的类和 EventManager 不属于同一个 package , 因此这个类必须是 public 的, 事件处理方法也必须是 public 的。
+
+* 定义接口的 Model 使用匿名内部类
+
+在 1.3.0 版本, 使用匿名内部类作为 REST 接口的 Model 是允许的, 但是 2.0.0 版本不允许。 如果采用这样的类型作为接口参数,
+启动的时候会报告异常。
+
+* 其他方面的影响
+
+由于 JDK 11 不允许通过反射破坏封装, 早期通过反射修改 private 字段的值,来规避一些三方软件的 bug, 以及做一些额外
+定制变得不可行, 使用这些特性 JDK 11 暂时只是打印警告, 在 JDK 13 等更高版本会彻底禁止。 因此业务开发的时候, 尽可能
+不要使用破坏封装的特性。
+
+## 常见问题
+
+* java-chassis运行时依赖于接口定义里面的名字
+
+为了更好的基于swagger对服务进行治理,以及提高客户端代码书写的灵活性,java-chassis要求书写的接口定义代码在编译的时候,带上参数名称信息,否则会报告如下错误:
+
+```
+Caused by: java.lang.IllegalStateException: parameter name is not present,
method=org.apache.servicecomb.samples.porter.file.api.InternalAccessEndpoint:localAccess
+solution:
+ change pom.xml, add compiler argument: -parameters, for example:
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <compilerArgument>-parameters</compilerArgument>
+ </configuration>
+ </plugin>
+```
+
+解决该问题可以通过配置maven compiler plugin, 加上-parameters参数。如果在IDE下面运行,需要设置 build ->
java compilers 在编译参数里面增加-parameters。
+
+* spring 5变更
+
+cse.bean.xml文件如果采用了classpath查找定义文件
+
+```
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
+ http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
+ http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
+```
+
+会报告下面的错误:
+
+```
+[main][WARN][org.springframework.beans.factory.xml.XmlBeanDefinitionReader:48]
Ignored XML validation warning
+org.xml.sax.SAXParseException: schema_reference.4: 无法读取方案文档
'classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd', 原因为 1)
无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是 <xsd:schema>。
+ at
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
~[?:1.8.0_131]
+ at
com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:99)
[?:1.8.0_131]
+ at
com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:392)
[?:1.8.0_131]
+```
+
+修改为:
+
+```
+<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
+```
+
+* SCBEngine使用时机
+
+代码
+
+```
+@RestSchema(schemaId = "inspector")
+@Path("/inspector")
+public class InspectorEndpoint {
+ private InspectorConfig inspectorConfig;
+
+ public InspectorEndpoint() {
+ this.inspectorConfig =
SCBEngine.getInstance().getPriorityPropertyManager().createConfigObject(InspectorConfig.class);
+ }
+```
+
+```
+Caused by: java.lang.NullPointerException
+ at org.apache.servicecomb.core.SCBEngine.<init>(SCBEngine.java:126)
+ at org.apache.servicecomb.core.SCBEngine.getInstance(SCBEngine.java:159)
+ at
org.apache.servicecomb.samples.porter.file.api.InspectorEndpoint.<init>(InspectorEndpoint.java:82)
+ at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+ at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+ at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+ at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+```
+
+不能够在bean的初始化里面使用SCBEngine的实例。这个实例业务需要在事件AFTER_REGISTRY等处理函数中使用。
+
+## 编译错误
+
+2.0.0 相对于 1.0.0 升级了大量三方件,包括netty, vert.x, spring, spring
boot等,直接引用这些组件的代码可能编译失败。同时还对代码进行了一定重构,有些代码使用了java-chassis未公开接口,使用这些接口可能编译失败。下面是一些常见的问题。下面一些PR的修改可以参考:
+
+ *
[升级netty&vertx](https://github.com/apache/servicecomb-java-chassis/pull/1394)
+ * [升级jackson](https://github.com/apache/servicecomb-java-chassis/pull/1381)
+ * [删除spring 4和spring boot
1的支持](https://github.com/apache/servicecomb-java-chassis/pull/1415)
+ * [调整2.x版本spring boot
starter名字](https://github.com/apache/servicecomb-java-chassis/pull/1439)
+
+下面是一些场景的问题:
+
+ * `router.routeWithRegex(regex).handler(CookieHandler.create())` 提示
CookieHandler deprecated,删除这行代码
+ 即可,新版本的vert.x已经默认提供了cookie处理。
+ * io.vertx.ext.web中的 `io.vertx.ext.web.Cookie已过时` , 修改
+ 为 `io.vertx.core.http.Cookie`
+
+2.0.0 一些可能被外部使用的内部接口调整:
+
+ * `Invocation` 类删除了 `getArgs` 接口, 替换为 `getSwaggerArguments` , 同时新增了
`getInvocationArguments`,
+ 关于这个变更的说明,请参考新特性介绍文章[弱类型契约](../features/weak-type-contrast.md)。
+ * 删除 `DynamicSchemaLoader` , 这个类早期版本提供出来是方便注册契约, 最新版本客户端契约发现可以通过服务中心
+ 完成,不再需要这样的功能。
+ *
`CseContext.getInstance().getTransportManager().findTransport(Const.RESTFUL)` 修改
+ 为
`SCBEngine.getInstance().getTransportManager().findTransport(Const.RESTFUL)`
+ * 测试代码可能使用
`CseContext.getInstance().getConsumerProviderManager().setTransport(microserviceName,
transport)` , 修改
+ 为 `ArchaiusUtils.setProperty("servicecomb.references.transport." +
microserviceName, transport);`
+
+## 已知缺陷
+
+ * 2.0.0 版本将 `servicecomb.service.registry.registerUrlPrefix` 弄丢了。
这个配置项是为一个特殊场景服务的的,
+ 默认值为 false。 在使用 WEB 容器(比如 tomcat) java-chassis的场景下, 如果设置了 context-path, 使用
java-chassis
+ 提供的 RestTemplate 访问服务的时候, 不需要指定 context-path,以保证用户不用关注微服务的部署方式,提供了很大的便利。
+ 但是有些用户的代码是历史遗留代码改造过来的,期望 URL 包含完整的 context-path。 使用 2.0.0 版本如果存在这个特殊要
+ 求, 程序会运行错误,访问接口提示 NOT FOUND。这个问题在 2.0.1 修复。
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_0_0T2_0_1.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_0_0T2_0_1.md
new file mode 100644
index 0000000..49689e7
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_0_0T2_0_1.md
@@ -0,0 +1,13 @@
+# 2.0.0 升级 2.0.1指导
+
+## trace id 记录的变更说明
+
+2.0.0 采用 %marker 记录 trace id, 由于 Marker 被设计为 Filtering 场景, 不适用于记录 trace id,
否则可能导致有些 logger 系统
+产生 OOM。 2.0.1 将 Marker 调整为了 MDC 。 使用指导参考 [2.0.1 新特性介绍: 在日志中记录trace
id](../features/trace-id.md)
+
+## 独立 tomcat (或者其他 web container ) 运行的场景
+
+在使用独立 tomcat 运行的场景, RestServletContextListener 在会在 contextInitialized 环节调用
Log4jUtils.init 初始化 log4j ,
+由于 log4j 目前已经被 log4j2 或者 logback 等替换, 从 2.0.1 开始, 不会调用 Log4jUtils 初始化 log4j 。
如果应用系统需要继续
+使用 log4j, 可以自定义 ServletContextListener ,调用 Log4jUtils.init 初始化 log4j。
+
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_0_1T2_1_0.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_0_1T2_1_0.md
new file mode 100644
index 0000000..bf4c21e
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_0_1T2_1_0.md
@@ -0,0 +1,106 @@
+# 2.0.1 升级 2.1.0指导
+
+## 服务注册发现的变化
+
+2.1.0 对服务注册发现进行了重构,提供了更好的接口 `Discovery` 和 `Registration` 方便开发者提供不同的实现。
+
+在2.0.1及其之前的版本,服务中心(servicecomb-service-center)作为唯一的服务注册发现,不支持扩展,服务中心
+还提供了一个本地版本的实现。具体有如下两种场景:
+
+* 使用服务中心: 这种场景不需要额外配置和引入依赖。
+* 使用本地注册发现
+
+ 需要调用
+
+
System.setProperty(LocalServiceRegistryClientImpl.LOCAL_REGISTRY_FILE_KEY,
"registry.yaml");
+
+ 启用本地注册发现,不需要额外配置依赖。
+
+升级到 2.1.0 版本后, 这两种常见的使用方式调整如下:
+
+* 使用服务中心
+
+ 引入依赖
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>registry-service-center</artifactId>
+ </dependency>
+
+* 使用本地注册发现
+
+ 引入依赖
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>registry-local</artifactId>
+ </dependency>
+
+ 不需要设置 `LOCAL_REGISTRY_FILE_KEY` 变量。
+
+2.1.0 需要显示的提供 pom 依赖,否则不依赖任何模块, 启动会失败。 同时引入服务中心和本地注册发现也是允许
+的,可以通过配置项关闭其中的部分功能。
+
+```yaml
+servicecomb.local.registry.enabled: true
+servicecomb.service.registry.enabled: true
+```
+
+详细开发指南参考[注册发现说明](../../registry/introduction.md)
+
+## 服务注册发现 API 的变化
+
+如果直接使用了 `RegistryUtils` 接口, 建议切换到 `DiscoveryManager` 或者 `RegistrationManager`,
+尽管 `RegistryUtils` 接口仍然可以使用。
+
+如果直接使用了 `DiscoveryTreee` 接口,2.1. 将服务发现的接口移动到了
`org.apache.servicecomb.registry`,
+当出现编译错误的时候,重新 import 对应的新 package 类即可。
+
+如果直接使用了 `ServiceRegistry` 接口, 2.1 将对应接口移动到了 `RegistrationManager`。
+
+## 参数校验的变化
+
+参数校验失败,早期版本采用 `ResourceBundleMessageInterpolator` 来生成错误消息。 由于这个类依赖于
+`Expression Language` 库,而这个库 JAVA 慢慢的不再提供支持,从 2.1.0 版本开始,切换为
`ParameterMessageInterpolator`
+来生成错误消息。 然后系统删除来对于 `jakarta.el` 的依赖。
+
+开发者仍然可以继续使用`ResourceBundleMessageInterpolator` 来生成错误消息。需要额外的做下面的配置:
+
+* 项目中引入依赖
+
+```xml
+ <dependency>
+ <groupId>org.glassfish</groupId>
+ <artifactId>jakarta.el</artifactId>
+ </dependency>
+```
+
+* 增加配置项
+
+```yaml
+servicecomb:
+ filters:
+ validation:
+ useResourceBundleMessageInterpolator: true
+```
+
+## Logger 系统的变化
+
+servicecomb 默认使用 Slf4j 记录日志,不集成具体实现,开发者可以通过引入具体的实现依赖使用不同的 Logger。
+早期的版本 `solution-basic` 包含了 log4j2 的依赖, 2.1.0 移除了这部分依赖, 开发者如果通过这种方式
+使用 log4j2 , 可能需要显示的增加 log4j2 的依赖, 比如:
+
+```xml
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-slf4j-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ </dependency>
+```
\ No newline at end of file
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_1_0T2_1_1.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_1_0T2_1_1.md
new file mode 100644
index 0000000..6b37f42
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_1_0T2_1_1.md
@@ -0,0 +1,16 @@
+# 2.1.0 升级 2.1.1指导
+
+## 使用 zero config 服务发现的场景
+
+zero config 服务发现是 2.1.0 新增的功能, 2.1.1 对发现过程中交换的报文格式进行了优化。 如果使用了 zero config
+功能, 升级到 2.1.1 的时候,需要对相关服务也同时做升级, 否则无法发现实例。
+
+
+## 使用 `swagger-generator-spring-data` 扩展,支持 `Page` 接口参数的场景
+
+由于 `spring-data` 不同的版本的接口差异很大, 这个模块支持的扩展对应的 `spring-data` 版本为
+`2.1.9.RELEASE`, 并且对于 `Sort` 接口的序列化没完整支持。 开发者如果使用 `spring-data`
+的不同版本, 或者需要对 `spring-data` 的不同接口提供扩展支持, 需要在项目中引入需要的
+版本, 并参考 `swagger-generator-spring-data` 实现自己的扩展,而不是直接依赖于
+`swagger-generator-spring-data` 模块。
+
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_1_1T2_1_5.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_1_1T2_1_5.md
new file mode 100644
index 0000000..0b63348
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_1_1T2_1_5.md
@@ -0,0 +1,61 @@
+# 2.1.1 升级 2.1.5 指导
+
+## `org.apache.servicecomb.swagger.invocation.Response` 属性 headers 类型调整
+
+为了更好的和 HTTP 协议标准保持兼容, 将 Response 的 headers 类型由
+`org.apache.servicecomb.swagger.invocation.response.Headers` 修改为
+`io.vertx.core.MultiMap`, 同时删除了类
`org.apache.servicecomb.swagger.invocation.response.Headers`
+以支持大小写无关的 HTTP header。 修改前 header 的 key 是区分大小写的,
+修改后, 不区分大小写。 该调整也涉及到和 header 操作有关的 getter, setter 方法的调整,使用了老方法的地方会编译出错,
+修改为对应的新方法即可。
+
+## `swagger-generator-spring-data` 调整
+
+这个模块提供了 `Page`、`Pagable`、`Order` 等接口的序列化支持。2.1.5 升级了 spring boot 版本,
这些接口存在变更,因此序列化
+结果发生了改变。 如果产品使用了这些类作为外部接口,需要考虑前端返回的 json 格式的变化对产品功能的影响。
+
+## `foudation-common` 调整
+
+这个模块提供了将时间类型数据格式化的功能。在2.1.5版本中,升级了jackson-bom版本从2.10.5到2.12.1,导致时间数据类型格式化结果
+产生了变更。例如:升级前格式化时间为`2017-07-21T17:32:28.000+0000`,升级后为`2017-07-21T17:32:28.000+00:00`。如果产品
+使用了该类型数据,需要考虑升级后数据类型的变更,对原有业务逻辑的影响。
+
+## `servicestage-environment` 调整
+
+这个模块只有一个 `mapping.xml` 文件,提供环境变量映射。原来的内容为:
+
+```yaml
+PAAS_CSE_ENDPOINT:
+ - servicecomb.service.registry.address
+ - servicecomb.config.client.serverUri
+PAAS_CSE_SC_ENDPOINT:
+ - servicecomb.service.registry.address
+PAAS_CSE_CC_ENDPOINT:
+ - servicecomb.config.client.serverUri
+PAAS_PROJECT_NAME:
+ - servicecomb.credentials.project
+
+CAS_APPLICATION_NAME:
+ - servicecomb.service.application
+CAS_COMPONENT_NAME:
+ - servicecomb.service.name
+CAS_INSTANCE_VERSION:
+ - servicecomb.service.version
+```
+
+调整为
+
+```yaml
+PAAS_CSE_ENDPOINT:
+ - servicecomb.service.registry.address
+ - servicecomb.config.client.serverUri
+PAAS_CSE_SC_ENDPOINT:
+ - servicecomb.service.registry.address
+PAAS_CSE_CC_ENDPOINT:
+ - servicecomb.config.client.serverUri
+PAAS_PROJECT_NAME:
+ - servicecomb.credentials.project
+```
+
+做这个调整是因为大部分业务场景,不需要覆盖应用名称、微服务名称和版本。 另外,微服务引擎还提供了
APP_MAPPING、SERVICE_MAPPING、VERSION_MAPING
+来支持应用名称、微服务名称和版本的覆盖。
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_1_5T2_6_0.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_1_5T2_6_0.md
new file mode 100644
index 0000000..a4f6bd4
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_1_5T2_6_0.md
@@ -0,0 +1,45 @@
+# 2.1.5 升级 2.6.0 指导
+
+## 支持`@NotBlank`和`@NotEmpty`
+
+参考下面的例子。这个新的特性在一些特殊的情况下可能导致业务故障,比如业务错误的加上了这些标签,但是实际上不会做参数校验,现在变更为校验。
+
+```java
+public class Teacher {
+
+ @NotBlank
+ private String name;
+
+ private String age;
+
+ // getters, setters
+}
+```
+
+## `servicecomb.rest.client.connection.idleTimeoutInSeconds` 缺省值修改为 30s
+
+因为服务端HTTP连接的Idle Timeout时间设置通常是60s(包括Vert.x、Tomcat等),为了尽可能降低客户端使用已经关闭了连接
+的概率,调整了这个参数的默认值。如果业务系统中没有设置这个参数,并且有些场景将 `servicecomb.request.timeout` 设置
+为大于30s, 那么可能导致这些请求提前超时。
+
+更多详细信息可以[参考案例](https://github.com/apache/servicecomb-java-chassis/issues/2603)。
+
+## `netty`和`vert.x` 升级
+
+2.6.0目前使用了最新的 `netty` 和 `vert.x` 版本, 这两个软件最新版本做了较多的重构,需要保证版本匹配才能够正常工作。
+业务尽可能不要自行单独调整单个软件的版本,保持和java-chassis使用一致,否则容易导致一些兼容性问题。 未来的版本,两个软件
+的兼容情况应该会有所改善,建议业务升级后,及时调整这两个软件的废弃用法。
+
+这两个软件升级目前已知的可能影响业务功能的点包括:
+
+* `servicecomb.rest.server.maxFormAttributeSize` 的缺省值为 8192。
java-chassis的缺省值使用了 `vert.x`
+ 的缺省值。这个值在最近的几个版本中,发生过几次变更,从无限制变更为1024, 变更为2048,到现在的8192。 如果业务需要
+ 依赖比较大的值,建议在配置文件设置适合应用场景的限制,不跟随这个缺省值。
+
+## `Spring` 和 `Spring Boot` 升级
+
+2.6.0目前使用了最新的 `Spring` 和 `Spring Boot` 版本,这个版本存在少量的变更,可能在某些特殊场景下影响业务功能。已知的情况包括:
+
+* 对URL进行了更加严格的校验,以符合HTTP协议标准。早期一些不符合标准的URL可能会报告错误。
+* `StringUtils`的`isEmpty`方法废弃了,这个方法容易造成误用,建议切换使用其他接口或者使用Commons Lang组件的接口。
+
diff --git a/java-chassis-reference/zh_CN/docs/upgrading/2_6_0T2_8_0.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_6_0T2_8_0.md
new file mode 100644
index 0000000..35d97c8
--- /dev/null
+++ b/java-chassis-reference/zh_CN/docs/upgrading/2_6_0T2_8_0.md
@@ -0,0 +1,12 @@
+# 2.6.0 升级 2.8.0 指导
+
+## `netty`和`vert.x` 升级
+
+2.8.0目前使用了最新的 `netty` 和 `vert.x` 版本。
+
+* `servicecomb.rest.server.http2.maxHeaderListSize` 的缺省值由`Integer.MAX_VALUE`
改为 8192。
+ java-chassis的缺省值使用了 `vert.x`的缺省值。 如果业务需要依赖比较大的值,建议在配置文件设置适合应用场景的限制,不跟随这个缺省值。
+
+## `Spring` 和 `Spring Boot` 升级
+
+2.8.0目前使用了最新的 `Spring` 和 `Spring Boot` 版本。
diff --git
a/java-chassis-reference/zh_CN/docs/featured-topics/upgrading/2_8_0T3_0_0.md
b/java-chassis-reference/zh_CN/docs/upgrading/2_8_0T3_0_0.md
similarity index 100%
rename from
java-chassis-reference/zh_CN/docs/featured-topics/upgrading/2_8_0T3_0_0.md
rename to java-chassis-reference/zh_CN/docs/upgrading/2_8_0T3_0_0.md
diff --git a/java-chassis-reference/zh_CN/mkdocs.yml
b/java-chassis-reference/zh_CN/mkdocs.yml
index 6483eb8..2a70aa7 100644
--- a/java-chassis-reference/zh_CN/mkdocs.yml
+++ b/java-chassis-reference/zh_CN/mkdocs.yml
@@ -100,13 +100,34 @@ nav:
- 应用性能监控: general-development/metrics.md
- 微服务调用链: general-development/microservice-invocation-chain.md
- Access Log配置: build-provider/access-log-configuration.md
-
- 专题文章:
- - 特性介绍: featured-topics/features.md
- - 技术解密: featured-topics/secrets.md
- - 升级指导: featured-topics/upgrading.md
+ - 特性介绍: Edge Service 通用的 HTTP 转发器 CommonHttpEdgeDispatcher:
featured-topics/http-dispatcher.md
+ - 特性介绍: date和date-time: featured-topics/date-time.md
- 兼容问题和兼容性策略: featured-topics/compatibility.md
- 性能问题分析和调优: featured-topics/performance.md
+- 技术解密:
+ - Java Chassis 3技术解密:负载均衡选择器: secrets/load-balancer.md
+ - Java Chassis 3技术解密:注册中心分区隔离: secrets/zone-isolation.md
+ - Java Chassis 3技术解密:多种序列化方式支持: secrets/serialization.md
+ - Java Chassis 3技术解密:熔断机制的改进路程: secrets/circuit-breaker.md
+ - Java Chassis 3技术解密:过载状态下的快速失败: secrets/fail-fast.md
+ - Java Chassis 3技术解密:应用视角的配置管理: secrets/applied-config.md
+ - Java Chassis 3技术解密:易扩展的多种注册中心支持: secrets/registries.md
+ - Java Chassis 3技术解密:与Spring Cloud的互操作: secrets/interoperability.md
+ - Java Chassis 3技术解密:ZooKeeper注册和配置中心: secrets/zookeeper.md
+ - Java Chassis 3技术解密:契约优先(API First)开发: secrets/api-first.md
+ - Java Chassis 3技术解密:接口维度负载均衡: secrets/load-balancer-operation.md
+ - Java Chassis 3技术解密:实用的可观测性: secrets/observability.md
+ - Java Chassis 3技术解密:流式响应和人工智能应用开发: secrets/sse.md
+ - Java Chassis 3技术解密:WebSocket和人工智能应用开发: secrets/websocket.md
+- 升级指导:
+ - 1.3.0 升级 2.0.0指导: upgrading/1_3_0T2_0_0.md
+ - 2.0.0 升级 2.0.1指导: upgrading/2_0_0T2_0_1.md
+ - 2.0.1 升级 2.1.0指导: upgrading/2_0_1T2_1_0.md
+ - 2.1.0 升级 2.1.1指导: upgrading/2_1_0T2_1_1.md
+ - 2.1.1 升级 2.1.5指导: upgrading/2_1_1T2_1_5.md
+ - 2.1.5 升级 2.6.0指导: upgrading/2_1_5T2_6_0.md
+ - 2.8.0 升级 3.0.0指导: upgrading/2_8_0T3_0_0.md
- 常用配置项参考:
- REST Transport Client 配置项: config-reference/rest-transport-client.md
- 常见问题: