heyile closed pull request #15: 补充客户端示例 AsyncRestTemplate ,对其他示例进行完善
URL: https://github.com/apache/incubator-servicecomb-docs/pull/15
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/java-chassis-reference/zh_CN/SUMMARY.md
b/java-chassis-reference/zh_CN/SUMMARY.md
index e880be7..4de1b3b 100644
--- a/java-chassis-reference/zh_CN/SUMMARY.md
+++ b/java-chassis-reference/zh_CN/SUMMARY.md
@@ -7,13 +7,14 @@
* [安装本地开发环境](start/development-environment.md)
* [开发第一个微服务](start/first-sample.md)
* [开发服务提供者](catalog/build-provider.md)
+
* [服务定义](build-provider/definition/service-definition.md)
* [定义服务契约](build-provider/define-contract.md)
* [使用隐式契约](build-provider/code-first.md)
* [使用Swagger注解](build-provider/swagger-annotation.md)
- * [用SpringMVC开发微服务](build-provider/springmvc.md)
- * [用JAX-RS开发微服务](build-provider/jaxrs.md)
- * [用透明RPC开发微服务](build-provider/transparent-rpc.md)
+ * [SpringMVC服务端开发示例](build-provider/springmvc.md)
+ * [JAX-RS服务端开发示例](build-provider/jaxrs.md)
+ * [透明RPC服务端开发示例](build-provider/transparent-rpc.md)
* [接口定义和数据类型](build-provider/interface-constraints.md)
* [服务监听地址和发布地址](build-provider/listen-address-and-publish-address.md)
* [服务配置](build-provider/service-configuration.md)
@@ -30,8 +31,11 @@
* [程序启动逻辑](build-provider/bootup.md)
* [微服务实例之间的逻辑隔离关系](build-provider/definition/isolate-relationship.md)
* [Access Log配置](build-provider/access-log-configuration.md)
+
* [开发服务消费者](catalog/build-consumer.md)
+
* [使用RestTemplate开发服务消费者](build-consumer/using-resttemplate.md)
+ * [使用AsynRestTemplate开发服务消费者](build-consumer/using-AsyncRestTemplate.md)
* [使用RPC方式开发服务消费者](build-consumer/develop-consumer-using-rpc.md)
* [使用服务契约](build-consumer/with-contract.md)
* [调用控制](build-consumer/invoke-control.md)
@@ -39,13 +43,13 @@
* [熔断策略](build-consumer/circuit-breaker.md)
* [限流策略](build-consumer/flow-control.md)
* [故障注入](build-consumer/fault-injection.md)
+
* [通用开发](catalog/general-develop.md)
- * [访问服务中心](general-development/visit-sc.md)
- * [使用动态配置](general-development/config.md)
* [应用性能监控](general-development/metrics.md)
* [微服务调用链](general-development/microservice-invocation-chain.md)
* [自定义调用链打点](general-development/customized-tracing.md)
* [本地开发和测试](general-development/local-develop-test.md)
+ * [访问服务中心](general-development/visit-sc.md)
* [Http Filter](general-development/http-filter.md)
* [文件上传](general-development/file-upload.md)
* [文件下载](general-development/file-download.md)
@@ -58,7 +62,6 @@
* [使用Context传递控制消息](general-development/context.md)
* [返回值序列化扩展](general-development/produceprocess.md)
* [CORS机制](general-development/CORS.md)
- * [获取熔断与实例隔离告警事件信息](general-development/AlarmEvent.md)
* [服务能力开放](edge/open-service.md)
* [使用Edge Service做边缘服务](edge/by-servicecomb-sdk.md)
* [使用confd和Nginx做边缘服务](edge/nginx.md)
diff --git a/java-chassis-reference/zh_CN/build-consumer/consumer-basePath.PNG
b/java-chassis-reference/zh_CN/build-consumer/consumer-basePath.PNG
new file mode 100644
index 0000000..545625c
Binary files /dev/null and
b/java-chassis-reference/zh_CN/build-consumer/consumer-basePath.PNG differ
diff --git
a/java-chassis-reference/zh_CN/build-consumer/consumer-serviceName.PNG
b/java-chassis-reference/zh_CN/build-consumer/consumer-serviceName.PNG
new file mode 100644
index 0000000..eafb2f8
Binary files /dev/null and
b/java-chassis-reference/zh_CN/build-consumer/consumer-serviceName.PNG differ
diff --git
a/java-chassis-reference/zh_CN/build-consumer/develop-consumer-using-rpc.md
b/java-chassis-reference/zh_CN/build-consumer/develop-consumer-using-rpc.md
index 1592bea..903c130 100644
--- a/java-chassis-reference/zh_CN/build-consumer/develop-consumer-using-rpc.md
+++ b/java-chassis-reference/zh_CN/build-consumer/develop-consumer-using-rpc.md
@@ -6,10 +6,45 @@ RPC开发方式允许用户通过在服务接口上标注注解来生成服务
只需要声明一个服务接口类型的成员,并且使用@RpcReference标注该成员,声明依赖的微服务及schemaId,即可进行服务调用,示例代码如下:
+* 透明RPC 客户端代码示例
+
+```java
+@Component
+public class PojoConsumerMain {
+
+ @RpcReference(microserviceName = "hello", schemaId = "hello")
+ private static Hello hello;
+
+ @RpcReference(microserviceName = "hello", schemaId = "codeFirstCompute")
+ public static Compute compute;
+
+ public static void main(String[] args)
+ throws Exception {
+ init();
+ System.out.println(hello.sayHi("Java Chassis"));
+ Person person = new Person();
+ person.setName("ServiceComb/Java Chassis");
+ System.out.println(hello.sayHello(person));
+ System.out.println("a=1, b=2, result=" + compute.add(1, 2));
+ }
+
+ public static void init()
+ throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
+```
+
+在以上代码中,服务消费者已经取得了服务提供者的服务接口`Hello 、Compute`,并在代码中声明一个`Hello`类型 和 Compute
类型的成员。通过在`hello 和
compute`上使用`@RPCReference`注解指明微服务名称和schemaId,ServiceComb框架可以在程序启动时从服务中心获取到对应的服务提供者实例信息,并且生成一个代理注入到hello和compute中,用户可以像调用本地类一样调用远程服务。
+
+* JAX-RS 客户端示例代码 :
+
```java
@Component
-public class CodeFirstConsumerMain {
- @RpcReference(microserviceName = "codefirst", schemaId = "codeFirstHello")
+public class JaxrsConsumerMain {
+
+ @RpcReference(microserviceName = "jaxrs", schemaId = "jaxrsHello")
private static Hello hello;
public static void main(String[] args) throws Exception {
@@ -27,5 +62,5 @@ public class CodeFirstConsumerMain {
}
```
-在以上代码中,服务消费者已经取得了服务提供者的服务接口`Hello`,并在代码中声明一个`Hello`类型的成员。通过在`hello`上使用`@RPCReference`注解指明微服务名称和schemaId,ServiceComb框架可以在程序启动时从服务中心获取到对应的服务提供者实例信息,并且生成一个代理注入到hello中,用户可以像调用本地类一样调用远程服务。
+
diff --git
a/java-chassis-reference/zh_CN/build-consumer/using-AsyncRestTemplate.md
b/java-chassis-reference/zh_CN/build-consumer/using-AsyncRestTemplate.md
new file mode 100644
index 0000000..7102b7b
--- /dev/null
+++ b/java-chassis-reference/zh_CN/build-consumer/using-AsyncRestTemplate.md
@@ -0,0 +1,64 @@
+## 概念阐述
+
+AsyncRestTemplate 开发方式允许用户异步的进行服务调用。具体的业务流程和 restTemplate 类似,只是这里以异步的形式进行服务的调用。
+
+## 示例代码
+
+AsyncRestTemplate 实例通过 new CseAsyncRestTemplate()来创建和获取,再使用该实例通过自定义的 URL
进行服务调用。
+
+* Spring MVC 客户端代码示例
+
+```java
+
+@Component
+public class SpringmvcConsumerMain {
+ private static final Logger LOG =
LoggerFactory.getLogger(SpringmvcConsumerMain.class);
+
+ public static void main(String[] args) throws Exception {
+ init();
+ Person person = new Person();
+ person.setName("ServiceComb/Java Chassis");
+ //AsyncRestTemplate Consumer
+ CseAsyncRestTemplate cseAsyncRestTemplate = new CseAsyncRestTemplate();
+ ListenableFuture<ResponseEntity<String>> responseEntityListenableFuture =
cseAsyncRestTemplate
+ .postForEntity("cse://springmvc/springmvchello/sayhi?name=Java
Chassis", null, String.class);
+ ResponseEntity<String> responseEntity =
responseEntityListenableFuture.get();
+ System.out.println("AsyncRestTemplate Consumer sayHi services: " +
responseEntity.getBody());
+
+ HttpEntity<Person> entity = new HttpEntity<>(person);
+ ListenableFuture<ResponseEntity<String>> listenableFuture =
cseAsyncRestTemplate
+ .exchange("cse://springmvc/springmvchello/sayhello", HttpMethod.POST,
entity, String.class);
+ // ResponseEntity<String> responseEntity1 = listenableFuture.get();
+ // System.out.println("AsyncRestTemplate Consumer sayHello services: "
+ responseEntity1.getBody());
+ //设置回调函数
+ listenableFuture.addCallback(
+ new ListenableFutureCallback<ResponseEntity<String>>() {
+ @Override
+ public void onFailure(Throwable ex) {
+ LOG.error("AsyncResTemplate Consumer catched exception when
sayHello, ", ex);
+ }
+
+ @Override
+ public void onSuccess(ResponseEntity<String> result) {
+ System.out.println("AsyncRestTemplate Consumer sayHello services:
" + result.getBody());
+ }
+ });
+ }
+
+ public static void init() throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
+
+```
+
+> 说明 :
+>
+> * URL 的格式和 RestTemplate 一样,具体可以参考 restTemplate
+> * 这里用自定义的 ListenableFuture
类来作为占位符,获取远程调用结束后可能获取的结果。同时也可以自定义回调函数,对可能返回的结果进行分批处理。
+
+
+
+
+
diff --git a/java-chassis-reference/zh_CN/build-consumer/using-resttemplate.md
b/java-chassis-reference/zh_CN/build-consumer/using-resttemplate.md
index 2b28d36..c94feff 100644
--- a/java-chassis-reference/zh_CN/build-consumer/using-resttemplate.md
+++ b/java-chassis-reference/zh_CN/build-consumer/using-resttemplate.md
@@ -10,6 +10,8 @@ RestTemplate是Spring提供的RESTful访问接口,ServiceComb提供该接口
RestTemplate实例通过调用`RestTemplateBuilder.create()`方法获取,再使用该实例通过自定义的URL进行服务调用,代码如下:
+* Spring MVC 客户端示例代码:
+
```java
@Component
public class SpringmvcConsumerMain {
@@ -32,6 +34,31 @@ public class SpringmvcConsumerMain {
BeanUtils.init();
}
}
+
+
+
+
+```
+
+* JAX RS 客户端示例代码:
+
+```java
+
+@Component
+public class JaxrsConsumerMain {
+
+ public static void main(String[] args) throws Exception {
+ init();
+ //其他都类似spring MVC示例的客户端代码,注意如果服务端只接收 GET 请求,要使用方法 getForObject()
+ RestTemplate restTemplate = RestTemplateBuilder.create();
+ String result =
restTemplate.getForObject("cse://jaxrs/jaxrshello/saybye", String.class);
+ }
+
+ public static void init() throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
```
> 说明:
@@ -39,5 +66,7 @@ public class SpringmvcConsumerMain {
> *
> URL格式为:`cse://microserviceName/path?querystring`。以[用SpringMVC开发微服务](/用SpringMVC开发微服务)中定义的服务提供者为例,其微服务名称是springmvc,basePath是`/springmvchello`,那么URL中的microserviceName=`springmvc`,请求sayhi时的path=`springmvchello/sayhi`,所以示例代码中请求sayhi的URL是`cse://springmvc/springmvchello/sayhi?name=Java
> Chassis`。
> * 使用这种URL格式,ServiceComb框架会在内部进行服务发现、熔断容错等处理并最终将请求发送到服务提供者。
+
+
diff --git a/java-chassis-reference/zh_CN/build-provider/jaxrs.md
b/java-chassis-reference/zh_CN/build-provider/jaxrs.md
index 8308d07..8344782 100644
--- a/java-chassis-reference/zh_CN/build-provider/jaxrs.md
+++ b/java-chassis-reference/zh_CN/build-provider/jaxrs.md
@@ -1,6 +1,6 @@
## 概念阐述
-ServiceComb支持开发者使用JAX-RS注解,使用JAX-RS模式开发服务。
+ServiceComb支持开发者使用JAX-RS注解,使用[JAX-RS](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/jaxrs-sample)模式开发服务。
## 开发示例
@@ -15,8 +15,6 @@ public interface Hello {
}
```
-
-
### 步骤 2实现服务。
使用JAX-RS注解开发业务代码,Hello的服务实现如下:
@@ -39,6 +37,15 @@ public class JaxrsHelloImpl implements Hello {
public String sayHello(Person person) {
return "Hello person " + person.getName();
}
+ /**
+ * 这个方法是实现类特有的,因此对它的远程调用会有所不同.
+ * 具体可以参考 jaxrs-consumer
+ */
+ @Path("/saybye")
+ @GET
+ public String sayBye() {
+ return "Bye !";
+ }
}
```
@@ -58,6 +65,18 @@ public class JaxrsHelloImpl implements Hello {
</beans>
```
+### 步骤 4启动服务。
+
+```
+public class JaxrsProviderMain{
+
+ public static void main(String[] args) throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
+```
+
## 涉及API
JAX-RS开发模式当前支持如下注解,所有注解的使用方法参考[JAX-RS官方文档](https://jax-rs-spec.java.net/nonav/2.0-rev-a/apidocs/index.html)。
diff --git a/java-chassis-reference/zh_CN/build-provider/springmvc.md
b/java-chassis-reference/zh_CN/build-provider/springmvc.md
index 94b616b..bbfbd44 100644
--- a/java-chassis-reference/zh_CN/build-provider/springmvc.md
+++ b/java-chassis-reference/zh_CN/build-provider/springmvc.md
@@ -1,6 +1,6 @@
## 概念阐述
-ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。
+ServiceComb支持SpringMVC注解,允许使用SpringMVC风格开发微服务。建议参照着项目
[SpringMVC](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/springmvc-sample)进行详细阅读
## 开发示例
@@ -15,8 +15,6 @@ public interface Hello {
}
```
-
-
### 步骤 2实现服务。
使用Spring
MVC注解开发业务代码,Hello的服务实现如下。在服务的实现类上打上注解@RestSchema,指定schemaId,schemaId必须保证微服务范围内唯一。
@@ -41,7 +39,7 @@ public class SpringmvcHelloImpl implements Hello {
### 步骤 3发布服务
-在`resources/META-INF/spring`目录下创建`springmvcHello.bean.xml`文件,命名规则为`\*.bean.xml`,配置spring进行服务扫描的base-package,文件内容如下:
+在`resources/META-INF/spring`目录下创建`springmvcprovider.bean.xml`文件,命名规则为`\*.bean.xml`,配置spring进行服务扫描的base-package,文件内容如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
@@ -56,6 +54,20 @@ public class SpringmvcHelloImpl implements Hello {
</beans>
```
+### 步骤 4启动provider 服务
+
+进行主要相关配置初始化。
+
+```
+public class SpringmvcProviderMain {
+
+ public static void main(String[] args) throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
+```
+
## 涉及API
Spring
MVC开发模式当前支持org.springframework.web.bind.annotation包下的如下注解,所有注解的使用方法参考[Spring
MVC官方文档](https://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html)。
diff --git a/java-chassis-reference/zh_CN/build-provider/transparent-rpc.md
b/java-chassis-reference/zh_CN/build-provider/transparent-rpc.md
index 0d61261..bea15aa 100644
--- a/java-chassis-reference/zh_CN/build-provider/transparent-rpc.md
+++ b/java-chassis-reference/zh_CN/build-provider/transparent-rpc.md
@@ -15,25 +15,64 @@ public interface Hello {
String sayHi(String name);
String sayHello(Person person);
}
-```
+public interface Compute {
+ int add(int a, int b);
+ int multi(int a, int b);
+ int sub(int a, int b);
+ int divide(int a, int b);
+}
+```
### 步骤 2实现服务
Hello的服务实现如下:
+> **说明**:
+> 每一个服务接口都需要定义一个schema声明。
+
+* 在接口Hello 和 Compute 的实现类上使用@RpcSchema注解定义schema,代码如下:
+
```java
+@RpcSchema(schemaId = "hello")
public class HelloImpl implements Hello {
- @Override
- public String sayHi(String name) {
- return "Hello " + name;
- }
- @Override
- public String sayHello(Person person) {
- return "Hello person " + person.getName();
+ @Override
+ public String sayHi(String name) {
+ return "Hello " + name;
+ }
+
+ @Override
+ public String sayHello(Person person) {
+ return "Hello person " + person.getName();
+ }
+}
+
+@RpcSchema(schemaId = "codeFirstCompute")
+public class CodeFirstComputeImpl implements Compute {
+ @Override
+ public int add(int a, int b) {
+ return a + b;
+ }
+
+ @Override
+ public int multi(int a, int b) {
+ return a * b;
+ }
+
+ @Override
+ public int sub(int a, int b) {
+ return a - b;
+ }
+
+ @Override
+ public int divide(int a, int b) {
+ if (b != 0) {
+ return a / b;
}
+ return 0;
+ }
}
```
@@ -41,7 +80,7 @@ public class HelloImpl implements Hello {
* 通过配置文件方式
-在resources/META-INF/spring目录下创建pojoHello.bean.xml文件,在文件中声明schema,文件内容如下:
+在resources/META-INF/spring目录下的pojoHello.bean.xml文件中,配置Spring进行服务扫描的base-package,文件内容如下:
```xml
<?xml version="1.0" encoding="UTF-8"?>
@@ -51,42 +90,22 @@ public class HelloImpl implements Hello {
xmlns:context=" http://www.springframework.org/schema/context "
xsi:schemaLocation=" http://www.springframework.org/schema/beans
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.huawei.com/schema/paas/cse/rpc
classpath:META-INF/spring/spring-paas-cse-rpc.xsd">
- <cse:rpc-schema schema-id="pojoHello"
implementation="org.apache.servicecomb.samples.pojo.provider.PojoHelloImpl"/>
+ <context:component-scan
base-package="org.apache.servicecomb.samples.pojo.provider"/>
</beans>
```
-> **说明**:
-> 每一个服务接口都需要定义一个schema声明。
-
-
-* 通过注解配置的开发方式
-1. 定义服务接口,与使用Spring xml的方式相同。
-2. 实现服务,与使用Spring xml的方式相同。
-3. 发布服务。在接口Hello的实现类上使用@RpcSchema注解定义schema,代码如下:
+### 步骤 4 启动服务
-```java
-import org.apache.servicecomb.provider.pojo.RpcSchema;
-
-@RpcSchema(schemaId = "pojoHello")
-public class HelloImpl implements Hello {
- // some code omitted
-}
```
+public class PojoProviderMain {
-在resources/META-INF/spring目录下的pojoHello.bean.xml文件中,配置Spring进行服务扫描的base-package,文件内容如下:
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<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:cse=" http://www.huawei.com/schema/paas/cse/rpc "
- xmlns:context=" http://www.springframework.org/schema/context "
- xsi:schemaLocation=" http://www.springframework.org/schema/beans
classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.huawei.com/schema/paas/cse/rpc
classpath:META-INF/spring/spring-paas-cse-rpc.xsd">
-
- <context:component-scan
base-package="org.apache.servicecomb.samples.pojo.provider"/>
-</beans>
+ public static void main(String[] args) throws Exception {
+ Log4jUtils.init();
+ BeanUtils.init();
+ }
+}
```
> **说明**:
diff --git a/java-chassis-reference/zh_CN/start/development-environment.md
b/java-chassis-reference/zh_CN/start/development-environment.md
index 50e07ee..d9cb38d 100644
--- a/java-chassis-reference/zh_CN/start/development-environment.md
+++ b/java-chassis-reference/zh_CN/start/development-environment.md
@@ -1,6 +1,4 @@
-
-
-应用开发环境所需安装的工具包括JDK、Maven和Eclipse。如果已经安装了这些开发工具,请跳过本节。
+应用开发环境所需安装的工具包括JDK、Maven、Eclipse 和 IDEA 。如果已经安装了这些开发工具,请跳过本节。
## JDK约束及安装步骤
@@ -53,7 +51,79 @@ e.(可选)设置本地仓库路径,用于保存从远程仓库获取的插
这里以路径D:\maven\repository为例。在/conf中找到settings.xml文件,设置localRepository为D:\maven\repository
-f.结果验证
+f. (可选)非内部员工可以自动忽略。要想maven 正常运行,必须配置 config/settings.xml文件。
+
+* 如果是蓝云:
+
+```
+ <mirror>
+ <id>mirrorId</id>
+ <mirrorOf>*</mirrorOf>
+ <name>Mirror of central repository.</name>
+ <url>http://maven.huaweicse.com/nexus/content/groups/public</url>
+ </mirror>
+```
+
+* 如果是黄云 :
+
+```
+ <mirrors>
+
+ <mirror>
+ <id>nexusMirror</id>
+ <mirrorOf>central</mirrorOf>
+ <url>http://rnd-mirrors.huawei.com/maven/</url>
+ </mirror>
+ </mirrors>
+
+ <profiles>
+ <profile>
+ <id>nexusProfile</id>
+ <repositories>
+ <repository>
+ <id>public</id>
+
<url>http://100.100.98.181:8081/nexus/content/groups/public/</url>
+ <!-- 通过仓库组至需要引入一次仓库即可;snapshots默认是关闭的,需要手工开启-->
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>cloudsop</id>
+
<url>http://10.93.64.153:8080/repository/Paas_V2R1_Main_new/</url>
+ <!-- 通过仓库组至需要引入一次仓库即可;snapshots默认是关闭的,需要手工开启-->
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
+ <pluginRepositories>
+ <pluginRepository>
+ <id>public</id>
+
<url>http://100.100.98.181:8081/nexus/content/groups/public/</url>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </pluginRepository>
+ </pluginRepositories>
+ </profile>
+ </profiles>
+
+ <activeProfiles>
+ <activeProfile>nexusProfile</activeProfile>
+ </activeProfiles>
+```
+
+g.结果验证
使用mvn -version命令验证是否安装成功,windows环境下回显如下:
@@ -88,3 +158,24 @@ c.(可选)将之前Maven安装中介绍的插件m2eclipse解压到Eclipse安
d.启动Eclipse,配置jre、maven settings以及默认编码格式为utf-8。
+
+
+## IDEA安装
+
+### **前提条件**
+
+a.JDK已经安装。
+
+b.Maven已经安装。
+
+### **安装步骤**
+
+a. 在官方网站下载 IDEA 安装包,收费版或者社区版的按个人需求。
+
+b. 设置编码格式都为 utf-8。
+
+
+
+c. 设置maven 配置
+
+
diff --git a/java-chassis-reference/zh_CN/start/first-sample.md
b/java-chassis-reference/zh_CN/start/first-sample.md
index 0c5cecc..f64faa8 100644
--- a/java-chassis-reference/zh_CN/start/first-sample.md
+++ b/java-chassis-reference/zh_CN/start/first-sample.md
@@ -1,15 +1,21 @@
开发者可以通过两种方式快速构建一个项目:
-* 下载samples项目
+* 下载samples项目。建议把整个项目都荡下来,按照例子[ SpringMVC
](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/springmvc-sample)或者
[JAX
RS](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/jaxrs-sample)进行初始化配置。
+
* 使用archetypes生成项目
开始之前,开发者需要先选择熟悉的开发方式,目前有3种方式可供选择:
+
* Spring MVC
* JAX RS
* RPC
他们对应的samples项目分别是:
+
* [Spring
MVC](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/springmvc-sample)
* [JAX
RS](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/jaxrs-sample)
*
[RPC](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/samples/pojo-sample)
*
或者使用[archetypes](https://github.com/apache/incubator-servicecomb-java-chassis/tree/master/archetypes)
+
+
+
diff --git a/java-chassis-reference/zh_CN/start/idea-maven.PNG
b/java-chassis-reference/zh_CN/start/idea-maven.PNG
new file mode 100644
index 0000000..e95229f
Binary files /dev/null and b/java-chassis-reference/zh_CN/start/idea-maven.PNG
differ
diff --git a/java-chassis-reference/zh_CN/start/idea-utf8.PNG
b/java-chassis-reference/zh_CN/start/idea-utf8.PNG
new file mode 100644
index 0000000..2318784
Binary files /dev/null and b/java-chassis-reference/zh_CN/start/idea-utf8.PNG
differ
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services