update read me using api first example (#4306)
diff --git a/README.md b/README.md
index 9e5f6f8..9c3e618 100644
--- a/README.md
+++ b/README.md
@@ -6,8 +6,8 @@
| Release Train | Latest Version | Compiled JDK Version | Tested JDK Version | Open API | Notes |
|----------------|----------------|----------------------|--------------------|----------|--------------------------|
-| Java Chassis 3 | 3.0.1 | OpenJDK 17 | OpenJDK 17 | 3.0.x | Depends on Spring Boot 3 |
-| Java Chassis 2 | 2.8.14 | OpenJDK 8 | OpenJDK 8, 11, 17 | 2.0.x | Depends on Spring 5 |
+| Java Chassis 3 | 3.1.0 | OpenJDK 17 | OpenJDK 17 | 3.0.x | Depends on Spring Boot 3 |
+| Java Chassis 2 | 2.8.16 | OpenJDK 8 | OpenJDK 8, 11, 17 | 2.0.x | Depends on Spring 5 |
| Java Chassis 1 | 1.3.11 | OpenJDK 8 | OpenJDK 8 | 2.0.x | End of Support |
>>>NOTICE: Since Open API 3.0.x is not compatible with 2.0.x, Java Chassis 2 and Java Chassis 1 can not
@@ -15,63 +15,52 @@
>>>NOTICE: Java Chassis 1 reached its end of support now after it's first release from 2018.
-# Why use Java Chassis
+# Quick Start
-- **High performance**
-
- The transport capability of Java Chassis is based on [Vert.x](https://vertx.io), which enables Java Chassis to process
- massive requests with relatively less hardware resources, and support [reactive develop style](https://www.reactivemanifesto.org).
-
-- **Native support for OpenAPI**
-
- Java Chassis describes the APIs of the microservices via [Swagger](https://swagger.io) natively, to help
- developers to design microservices that comply to [OpenAPI standard](https://swagger.io/specification/v3/).
-
-- **Flexible develop style**
-
- Java Chassis allows developers to develop their microservice APIs in `SpringMVC`/`JAX-RS`/`Transparent RPC` styles,
- and to send the request in `RPC`/`RestTemplate` styles. And there are three kind of build-in transport mode:
- `Rest over Vertx`/`Rest over Servlet`/`Highway`. All of these features can be combined and replaced easily,
- because they are decoupled and all based on the Swagger schema, which can provide high flexibility.
-
-- **Out-of-box microservice governance features**
-
- Java Chassis provides a lot of features for microservice governance and monitor.
-
-# Quick Start (Spring MVC)
-
-Provider service:
+* Define API
```java
-@RestSchema(schemaId = "ProviderController")
-@RequestMapping(path = "/")
-public class ProviderController {
+@RequestMapping(path = "/provider")
+public interface ProviderService {
@GetMapping("/sayHello")
- public String sayHello(@RequestParam("name") String name) {
+ String sayHello(@RequestParam("name") String name);
+}
+```
+
+* Provider service
+```java
+@RestSchema(schemaId = "ProviderController", schemaInterface = ProviderService.class)
+public class ProviderController implements ProviderService {
+ @Override
+ public String sayHello(String name) {
return "Hello " + name;
}
}
```
-Consumer service:
-
-Declare Provider service interface to match the Provider method signature. (Method name, return type, parameter name, parameter type)
+* Consumer service
```java
-public interface ProviderService {
- String sayHello(String name);
+@Configuration
+public class ProviderServiceConfiguration {
+ @Bean
+ public ProviderService providerService() {
+ return Invoker.createProxy("provider", "ProviderController", ProviderService.class);
+ }
}
```
Invoke Provider service with RPC
```java
-@RestSchema(schemaId = "ConsumerController")
-@RequestMapping(path = "/")
-public class ConsumerController {
- @RpcReference(schemaId = "ProviderController", microserviceName = "provider")
+@RestSchema(schemaId = "ConsumerController", schemaInterface = ConsumerService.class)
+public class ConsumerController implements ConsumerService {
private ProviderService providerService;
- // consumer service which delegate the implementation to provider service.
- @GetMapping("/sayHello")
- public String sayHello(@RequestParam("name") String name) {
+ @Autowired
+ public void setProviderService(ProviderService providerService) {
+ this.providerService = providerService;
+ }
+
+ @Override
+ public String sayHello(String name) {
return providerService.sayHello(name);
}
}
@@ -83,7 +72,7 @@
Project documentation is available on the [ServiceComb Java Chassis Developer Guide][java-chassis-developer-guide].
-[java-chassis-developer-guide]: https://servicecomb.apache.org/references/java-chassis/en_US/
+[java-chassis-developer-guide]: https://servicecomb.apache.org/references/java-chassis/zh_CN/
# Building
diff --git a/README_ZH.md b/README_ZH.md
index 5c17ed7..9a1cd17 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -2,9 +2,11 @@
Apache ServiceComb Java Chassis 给开发者提供一个快速构建微服务的JAVA SDK。它包含如下特性:
-* 多种开发风格,REST(JAX-RS、Spring MVC)和RPC
-* 多种通信协议, HTTP over Vert.x、Http Over Servlet、Highway等
-* 统一一致的服务提供者、服务消费者处理链,以及基于契约的开箱即用的服务治理能力
+* 基于Open API的契约优先(API First)开发模式,满足开发过程可管理、开发规范可验证要求。
+* 多种开发风格,REST(JAX-RS、Spring MVC)和RPC等,高效支持遗留系统迁移和新系统开发场景。
+* 多种通信协议, HTTP over Vert.x、Http Over Servlet、Highway等,满足不同场景对于性能、韧性的需求。
+* 统一一致的服务提供者、服务消费者处理链,易于扩展新功能。
+* 提供服务发现、配置管理、熔断、限流、灰度发布等开箱即用的服务治理能力。
开发者可以通过[设计选型参考][design]了解更多特性和设计原理。
@@ -14,68 +16,64 @@
| 版本火车 | 最新版本 | 编译的JDK版本 | 支持的JDK版本 | Open API | 备注 |
|----------------|--------|------------|-------------------|----------|-----------------|
-| Java Chassis 3 | 3.0.1 | OpenJDK 17 | OpenJDK 17 | 3.0.x | 依赖Spring Boot 3 |
-| Java Chassis 2 | 2.8.14 | OpenJDK 8 | OpenJDK 8, 11, 17 | 2.0.x | 依赖Spring 5 |
+| Java Chassis 3 | 3.1.0 | OpenJDK 17 | OpenJDK 17 | 3.0.x | 依赖Spring Boot 3 |
+| Java Chassis 2 | 2.8.16 | OpenJDK 8 | OpenJDK 8, 11, 17 | 2.0.x | 依赖Spring 5 |
| Java Chassis 1 | 1.3.11 | OpenJDK 8 | OpenJDK 8 | 2.0.x | 停止更新 |
>>>NOTICE: Open API 3.0.x 不兼容 2.0.x, 因此Java Chassis 2、Java Chassis 1不能与Java Chassis 3共存互访. 升级Java Chassis 3, 需要将相关的消费者、提供者和边缘服务同时升级.
>>>NOTICE: Java Chassis 1 第一个版本于2018发布,已经停止更新.
-# 为什么使用Java Chassis
+# 快速开始
-- **高性能**
-
- Java Chassis 网络层基于 [Vert.x](https://vertx.io) 实现, 支持开发者使用[响应式编程](https://www.reactivemanifesto.org), 开发者在使用熟悉的REST风格设计业务接口的时候,也能够获取到非常高性能的吞吐量。同时还提供了Highway协议,满足更高性能场景的要求。
-
-- **原生支持OpenAPI**
-
- Java Chassis 的接口开发、服务治理都基于 [Swagger](https://swagger.io) ,并通过接口语义检查,使得接口定义符合 [OpenAPI 规范](https://swagger.io/specification/v3/).
-
-- **灵活的开发方式**
-
- 开发者可以使用 `SpringMVC`/`JAX-RS`/`Transparent RPC` 任意一种方式定义服务端接口, 并使用`RPC`/`RestTemplate` 等方式访问这些接口. 得益于Java Chassis的通信层与开发方式分离的设计,开发者可以在 `Rest over Vertx`/`Rest over Servlet`/`Highway`等通信模式下自由切换.
-
-- **开箱即用的服务治理能力**
-
- Java Chassis 提供了大量开箱即用的服务治理能力,包括服务发现、熔断容错、负载均衡、流量控制等。
-
-
-# 快速开始 (Spring MVC)
-
-定义提供者。
+* 定义服务契约
```java
-@RestSchema(schemaId = "ProviderController")
-@RequestMapping(path = "/")
-public class ProviderController {
+@RequestMapping(path = "/provider")
+public interface ProviderService {
@GetMapping("/sayHello")
- public String sayHello(@RequestParam("name") String name) {
+ String sayHello(@RequestParam("name") String name);
+}
+```
+
+* 定义提供者
+
+```java
+@RestSchema(schemaId = "ProviderController", schemaInterface = ProviderService.class)
+public class ProviderController implements ProviderService {
+ @Override
+ public String sayHello(String name) {
return "Hello " + name;
}
}
```
-定义消费者。首先定义一个接口,与需要访问的提供者的方法拥有一样的签名(方法名、返回值类型、参数名称和参数类型)。
+* 定义消费者
```java
-public interface ProviderService {
- String sayHello(String name);
+@Configuration
+public class ProviderServiceConfiguration {
+ @Bean
+ public ProviderService providerService() {
+ return Invoker.createProxy("provider", "ProviderController", ProviderService.class);
+ }
}
```
使用RPC方式访问提供者。
```java
-@RestSchema(schemaId = "ConsumerController")
-@RequestMapping(path = "/")
-public class ConsumerController {
- @RpcReference(schemaId = "ProviderController", microserviceName = "provider")
+@RestSchema(schemaId = "ConsumerController", schemaInterface = ConsumerService.class)
+public class ConsumerController implements ConsumerService {
private ProviderService providerService;
- // consumer service which delegate the implementation to provider service.
- @GetMapping("/sayHello")
- public String sayHello(@RequestParam("name") String name) {
+ @Autowired
+ public void setProviderService(ProviderService providerService) {
+ this.providerService = providerService;
+ }
+
+ @Override
+ public String sayHello(String name) {
return providerService.sayHello(name);
}
}