开发第一个微服务
准备工作
在开发第一个Java-Chassis微服务之前,请先确保你的本地开发环境已经准备就绪,参考安装本地开发环境。
本文示例需要用到服务中心,请参考ServiceCenter 安装说明。
开发一个HelloWorld服务
配置pom文件
创建一个空的maven工程。建议先配置dependencyManagement
来管理依赖项,依赖项只需要引入solution-basic
即可:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>java-chassis-dependencies</artifactId>
<version>${java-chassis-dependencies.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>solution-basic</artifactId>
</dependency>
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>registry-service-center</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.1</version>
</dependency>
</dependencies>
solution-basic
中已经包含了常见场景下开发Java-Chassis微服务所需的全部依赖项。
Java-Chassis 2.0版本还需要引入maven-compiler-plugin
插件,使项目打包时保留方法参数名:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<compilerArgument>-parameters</compilerArgument>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
添加配置文件
Java-Chassis默认读取的配置文件名为microservice.yaml
,存放在resources
目录中。
文件内容如下,这份文件表示当前开发的是sample
应用下的名为helloworld
的微服务,版本为0.0.1。该微服务连接的服务中心地址为http://127.0.0.1:30100
,监听8080
端口。
APPLICATION_ID: sample
service_description:
name: helloworld
version: 1.0.0
servicecomb:
service:
registry:
address: http://127.0.0.1:30100
rest:
address: 0.0.0.0:8080
编写Main类
在工程中添加一个Main类,用于启动微服务实例:
package org.apache.servicecomb.samples;
import org.apache.servicecomb.foundation.common.utils.BeanUtils;
public class AppMain {
public static void main(String[] args) {
BeanUtils.init();
}
}
调用org.apache.servicecomb.foundation.common.utils.BeanUtils#init()
方法会完成配置加载、Spring应用上下文加载、微服务注册等一系列启动流程。
编写REST接口类
最后在工程中添加一个REST接口类用于接收请求:
package org.apache.servicecomb.samples.service;
import org.apache.servicecomb.provider.rest.common.RestSchema;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@RestSchema(schemaId = "hello")
@RequestMapping("/")
public class HelloWorldService {
@GetMapping("/hello")
public String hello() {
return "Hello world!";
}
}
添加日志配置文件
solution-basic
引入了log4j2组件。如果想要看到运行日志,还需要手动添加一份日志配置文件,文件存放位置为resources\log4j2.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}[%L] - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
启动服务
以上工作完成后,运行AppMain
类即可启动微服务。在浏览器中打开本地服务中心的页面http://127.0.0.1:30103/
,如果能看到helloworld服务的实例记录,则表示启动成功。如下图所示:
访问http://127.0.0.1:8080/hello
,可以得到helloworld服务的响应"Hello world!"
。至此,第一个Java-Chassis微服务开发完成。
补充说明
上文以Spring MVC开发风格来编写helloworld服务的REST接口类,目前Java-Chassis提供了三种REST接口类开发风格:
- Spring MVC
- JaxRS
- POJO
Spring MVC和JaxRS适合REST接口开发。 POJO是通常说的RPC,适合于进行内部接口开发。java-chassis允许在一个微服务里面混合使用上述开发方式,并且可以使用完全一致的方式,比如RestTemplate或者POJO的方式访问不同类型的服务,所以开始之前,可以根据熟悉程度,选择任意一种开发方式即可。java-chassis的开发方式和通信方式是完全解耦的,因此不同的开发方式并没有性能上的差异。
开发者也可以通过如下方式快速构建一个项目:
-
下载samples项目。java-chassis提供了大量的示例代码,这些示例代码可以通过 servicecomb-samples 获取。
- JaxRS例子
-
使用archetypes生成项目
archetypes是maven提供的一种机制,对于使用maven的用户,可以在项目里面配置插件,生成项目。java-chassis提供了多个archetypes供开发者使用,详细参考链接
- 使用脚手架生成项目
脚手架提供了一个图形化向导,通过向导可以快速构建项目,参考链接。