文档首页 > > 快速入门> ServiceComb Java 微服务开发部署

ServiceComb Java 微服务开发部署

分享
更新时间: 2020/04/20 GMT+08:00

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

本文主要介绍如何使用java chassis对接华为云CSE引擎。

前提条件

  • 已获取AK/SK,请参考下载AK/SK
  • 已获取项目名,如未获取请参考查看项目名
  • 已了解如何购买ServiceComb微服务引擎且购买了ServiceComb微服务引擎,相关操作请参考购买ServiceComb引擎
  • 对JAVA编程有一定了解,并能熟练使用某个JAVA IDE开发。
  • 掌握maven,用于管理工程依赖,会maven常见的编译、打包命令。

服务运行原理

服务运行原理及说明如下。

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

本地开发

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

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

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

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

开发第一个微服务

开发Java-Chassis微服务,需要先配置好本地环境

  1. 配置POM依赖。

      <!--  配置CSE版本--> 
      <properties>
        <cse.version>3.0.0</cse.version>
      </properties>
     
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>huaweicloudsdk-releases</id>
          <name>huaweicloudsdk</name>
          <url>https://repo.huaweicloud.com/repository/maven/huaweicloudsdk/</url>
        </repository>
      </repositories>
     
     
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.huawei.paas.cse</groupId>
            <artifactId>cse-dependency</artifactId>
            <version>${cse.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
     
      <dependencies>
        <dependency>
          <groupId>com.huawei.paas.cse</groupId>
          <artifactId>cse-solution-service-engine</artifactId>
        </dependency>
        <!-- default using log4j2 -->
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-api</artifactId>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
        </dependency>
      </dependencies>

    创建一个空的maven工程,建议先配置 dependencyManagement 来管理依赖项,依赖项只需要引入 cse-solution-service-engine、log4j 相关依赖。

  2. 添加配置文件。

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

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

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

    APPLICATION_ID: sample  # 服务所属应用的应用id,默认服务之间调用必须在同一个应用里面
    service_description:
      name: helloworld # 服务名称
      version: 1.0.0   # 服务版本
    servicecomb:
      service:
        registry:
          address: https://xxx.xxx  # CSE引擎服务注册发现地址, https或者http按照实际填写, 用户需要确定本地到注册中心地址在网络上是互通的。
      config:
        client:
          serverUri: https://xxx.xxx # CSE引擎配置中心地址, https或者http按照实际填写, 用户需要确定本地到配置中心地址在网络上是互通的。  
      rest:
        address: 0.0.0.0:8080 # 服务监听地址
      credentials:
        accessKey: ak  #结合用户实际值ak和加解密扩展进行配置
        secretKey: sk  #结合用户实际值sk和加解密扩展进行配置
        akskCustomCipher: default  #用户扩展解密com.huawei.paas.foundation.auth.credentials.AKSKCipher的实现类的name值, 默认default表示明文,无须加解密

  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. 上传jar包。

    登录ServiceStage,进入软件中心,通过界面上传,请参考上传软件包

  2. 登录ServiceStage控制台,在已经创建的应用下新增组件,组件类型选择:“微服务”。

  3. 部署 helloworld jar包。

    • 组件名称填写:hello-cse。
    • 框架选择:Java Chassis。
    • 运行时选择:Java8。
    • 源码/软件包选择:Jar包。

  4. 选择创建并部署,选择部署环境。

  5. 组件配置,开启外网访问,选择目标微服务引擎。

  6. 规格确认,提交后开始部署组件,等待组件部署完成。

验证部署结果

  1. 到目标微服务引擎控制台的服务目录界面, 发现实例成功注册。

  2. 点击外网访问地址。调用对应接口API“/hello”,返回字符串,如下所示。

    "Hello world!"

分享:

    相关文档

    相关产品

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

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

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

字符长度不能超过200

提交反馈 取消

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

智能客服提问云社区提问