文档首页 > > 快速入门>

ServiceComb Java微服务开发部署

ServiceComb Java微服务开发部署

分享
更新时间:2021/02/08 GMT+08:00

Apache ServiceComb Java Chassis是一个开源的Java微服务开发框架,可以帮助用户快速开发微服务,并提供了一系列开箱即用的特性。

本文主要介绍如何使用Java Chassis对接华为云CSE引擎。建议使用Java Chassis 2.1.3及其以上版本。

前提条件

  • 已获取AK/SK,请参考访问密钥
  • 已获取项目名,请参考API凭证
  • 已了解如何购买微服务引擎且购买了微服务引擎,相关操作请参考创建微服务引擎专享版
  • 对Java编程有一定了解,并能熟练使用某个Java IDE开发。
  • 掌握Maven,用于管理工程依赖,会Maven常见的编译、打包命令。

服务运行原理

图1 服务运行原理

图1所示:

  • consumer与provider是开发者开发出的微服务。
  • 开发者到控制台购买微服务引擎,并将服务连接到引擎上使用。
  • 服务通过注册到Service center中让别的服务发现地址以实现通信,通过配置管理服务管理配置项。

本地开发

Java Chassis支持如下三种开发方式开发服务生产者:

支持如下两种开发方式开发服务消费者。

推荐使用JAXR-RS 或者 SpringMVC方式开发服务生产者,使用透明RPC方式开发服务消费者。

在完成开发之后,可以使用ServiceStage进行部署、托管和运维。

开发第一个微服务

开发Java Chassis微服务,需要先配置好本地环境,方法请参考:https://docs.servicecomb.io/java-chassis/zh_CN/start/development-environment/。

  1. 配置POM依赖。

      <!--  配置 Java Chassis 版本 --> 
      <properties>
        <servicecomb.version>2.1.3</servicecomb.version>
      </properties>
     
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>org.apache.servicecomb</groupId>
            <artifactId>java-chassis-dependencies</artifactId>
            <version>${servicecomb.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
     
      <dependencies>
       <!-- sulution-basic包含了各种通用开发功能 -->
        <dependency>
          <groupId>org.apache.servicecomb</groupId>
          <artifactId>solution-basic</artifactId>
        </dependency>
        <!-- servicestage-environment包含了环境变量映射 -->
        <dependency>
          <groupId>org.apache.servicecomb</groupId>
          <artifactId>servicestage-environment</artifactId>
        </dependency>
        <!-- registry-service-center 包含了注册中心接入 -->
        <dependency>
          <groupId>org.apache.servicecomb</groupId>
          <artifactId>registry-service-center</artifactId>
        </dependency>
        <!-- 日志配置,这里使用 log4j2 -->
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
      </dependencies>

    创建一个空的Maven工程,建议先配置dependencyManagement来管理依赖项,依赖项只需要引入solution-basic等相关依赖。

  2. 添加配置文件。

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

    文件内容如下,这份文件表示当前开发的是sample应用名下的helloworld微服务,版本是0.0.1。该微服务连接的服务中心和配置中心是CSE引擎,监听端口是8080 。

    本示例需要使用服务中心,用户需要保证本地到CSE微服务引擎在网络上是互通的,服务注册发现地址、配置中心地址的获取请查看微服务引擎接入地址

    servicecomb:
      service:
        application: sample  # 服务所属应用的应用id,默认服务之间调用必须在同一个应用里面
        name: helloworld # 服务名称
        version: 1.0.0   # 服务版本
        registry:
          # CSE引擎服务服务注册发现地址
          address: https://cse.cn-south-1.myhuaweicloud.com
          instance:
            watch: false
      config:
        client:
          # CSE引擎服务配置中心地址
          serverUri: https://cse.cn-south-1.myhuaweicloud.com
          refreshMode: 1 
      rest:
        address: 0.0.0.0:8080 # 服务监听地址
      credentials:
        akskEnabled: true
        accessKey: AK  #结合用户实际值AK和加解密扩展进行配置
        secretKey: SK  #结合用户实际值SK和加解密扩展进行配置
        akskCustomCipher: default  #用户扩展解密
        project: cn-south-1 #项目名称

  3. 编写启动Main类。

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

    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应用上下文加载、微服务注册等一系列启动流程。

  4. 编写REST 接口类。

    在工程中添加一个REST接口类用于接收请求和验证。

    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!";
      }
    }

  5. 添加日志配置文件。

    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>

  6. 启动并验证服务。

    在以上工作完成后,启动AppMain类即可启动微服务。

    启动之后,在CSE引擎页选择查看控制台 > 服务目录可以看到注册的当前服务。访问http://127.0.0.1:8080/hello,可以得到helloworld服务的响应 "Hello world!"。

    # 尝试访问  http://127.0.0.1:8080/hello
    curl -k http://127.0.0.1:8080/hello
    "Hello world!"

    至此,第一个Java Chassis微服务开发完成。

  7. 生成可执行Jar包。

    • 一般微服务是直接以Jar包的形式启动、部署。
    • Java Chassis对可执行Jar包的打包方式没有限制,这里使用spring-boot-maven-plugin,需要在pom中增加如下配置,注意mainClass属性需要配置成服务的main类。
      <build>
        <!-- 指定生成的Jar包名称-->
        <finalName>app</finalName>  
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <!-- 推荐用最新版的-->
            <version>2.2.5.RELEASE</version>
            <configuration>
              <!-- 启动Main类的路径-->
              <mainClass>xxx.xxx.xxx.AppMain</mainClass>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>repackage</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>

    在pom.xml同级目录执行命令mvn clean install -DskipTests,会生成一个名字为app的可执行Jar包。

    # 修改POM文件之后,在POM同级目录
    mvn clean install -DskipTests
    # 默认Jar包是生成在 target 目录下
    cd target
     
    # 启动微服务
    java -jar app.jar

    微服务启动之后,可以到CSE微服务引擎控制台和访问http://127.0.0.1:8080/hello验证服务正常启动,且功能正常。

创建并部署应用

创建并部署应用前的准备工作如下:

  1. 在已经创建的应用下创建微服务组件,请参考创建微服务组件

    1. “选择运行时”:选择“Java8”
    2. “选择框架/服务网格”:选择“Java Chassis”
    3. “组件名称”:填写“hello-cse”
    4. “源码/软件包”:选择“Jar包”
    5. “上传方式”:选择“SWR软件仓库选择”。单击“选择软件包”,选择已上传的Jar包。

  2. 部署Jar包,请参考部署组件
  3. 选择应用管理 > 应用列表,单击应用名称。
  4. “环境视图”中单击组件名称进入组件“概览”页。
  5. 选择访问方式 > 添加服务

    1. “访问方式”:选择“公网访问”
    2. “访问类型”:选择“负载均衡”,添加公网ELB。
    3. “容器端口”:输入“8080”
    4. 单击“确定”

验证部署结果

  1. 登录ServiceStage,选择选择应用管理 > 应用列表,单击应用名称。
  2. “环境视图”中组件页面,选择微服务管理 > 服务目录,查看实例数确认是否注册成功。
  3. 在浏览器地址栏输入http://访问地址/hello,返回如下字符串:

    Hello world!

    访问地址获取方法:

    1. 登录ServiceStage,选择“应用管理 > 应用列表”。
    2. 单击应用名称,在“环境视图”中单击组件名称进入“概览”页。
    3. 单击“访问方式”,在“访问地址”列获取访问地址。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问