开发第一个微服务

准备工作

在开发第一个Java-Chassis微服务之前,请先确保你的本地开发环境已经准备就绪,参考安装本地开发环境

本文示例需要用到服务中心,请参考ServiceCenter 安装说明

开发一个HelloWorld服务

配置pom文件

创建一个空的maven工程。建议先配置dependencyManagement来管理依赖项,依赖项只需要引入solution-basic即可:

  1. <dependencyManagement>
  2. <dependencies>
  3. <dependency>
  4. <groupId>org.apache.servicecomb</groupId>
  5. <artifactId>java-chassis-dependencies</artifactId>
  6. <version>${java-chassis-dependencies.version}</version>
  7. <type>pom</type>
  8. <scope>import</scope>
  9. </dependency>
  10. </dependencies>
  11. </dependencyManagement>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.apache.servicecomb</groupId>
  15. <artifactId>solution-basic</artifactId>
  16. </dependency>
  17. </dependencies>

solution-basic中已经包含了常见场景下开发Java-Chassis微服务所需的全部依赖项。

Java-Chassis 2.0版本还需要引入maven-compiler-plugin插件,使项目打包时保留方法参数名:

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-compiler-plugin</artifactId>
  6. <version>3.1</version>
  7. <configuration>
  8. <compilerArgument>-parameters</compilerArgument>
  9. <encoding>UTF-8</encoding>
  10. <source>1.8</source>
  11. <target>1.8</target>
  12. </configuration>
  13. </plugin>
  14. </plugins>
  15. </build>

添加配置文件

Java-Chassis默认读取的配置文件名为microservice.yaml,存放在resources目录中。

文件内容如下,这份文件表示当前开发的是sample应用下的名为helloworld的微服务,版本为0.0.1。该微服务连接的服务中心地址为http://127.0.0.1:30100,监听8080端口。

  1. APPLICATION_ID: sample
  2. service_description:
  3. name: helloworld
  4. version: 1.0.0
  5. servicecomb:
  6. service:
  7. registry:
  8. address: http://127.0.0.1:30100
  9. rest:
  10. address: 0.0.0.0:8080

编写Main类

在工程中添加一个Main类,用于启动微服务实例:

  1. package org.apache.servicecomb.samples;
  2. import org.apache.servicecomb.foundation.common.utils.BeanUtils;
  3. public class AppMain {
  4. public static void main(String[] args) {
  5. BeanUtils.init();
  6. }
  7. }

调用org.apache.servicecomb.foundation.common.utils.BeanUtils#init()方法会完成配置加载、Spring应用上下文加载、微服务注册等一系列启动流程。

编写REST接口类

最后在工程中添加一个REST接口类用于接收请求:

  1. package org.apache.servicecomb.samples.service;
  2. import org.apache.servicecomb.provider.rest.common.RestSchema;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @RestSchema(schemaId = "hello")
  6. @RequestMapping("/")
  7. public class HelloWorldService {
  8. @GetMapping("/hello")
  9. public String hello() {
  10. return "Hello world!";
  11. }
  12. }

添加日志配置文件

solution-basic引入了log4j2组件。如果想要看到运行日志,还需要手动添加一份日志配置文件,文件存放位置为resources\log4j2.xml,内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Configuration status="WARN">
  3. <Appenders>
  4. <Console name="Console" target="SYSTEM_OUT">
  5. <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}[%L] - %msg%n"/>
  6. </Console>
  7. </Appenders>
  8. <Loggers>
  9. <Root level="info">
  10. <AppenderRef ref="Console"/>
  11. </Root>
  12. </Loggers>
  13. </Configuration>

启动服务

以上工作完成后,运行AppMain类即可启动微服务。在浏览器中打开本地服务中心的页面http://127.0.0.1:30103/,如果能看到helloworld服务的实例记录,则表示启动成功。如下图所示: 开发第一个微服务 - 图1

访问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的开发方式和通信方式是完全解耦的,因此不同的开发方式并没有性能上的差异。

开发者也可以通过如下方式快速构建一个项目:

archetypes是maven提供的一种机制,对于使用maven的用户,可以在项目里面配置插件,生成项目。java-chassis提供了多个archetypes供开发者使用,详细参考链接

  • 使用脚手架生成项目

脚手架提供了一个图形化向导,通过向导可以快速构建项目,参考链接