使用Service Center和治理中心管理Spring Cloud应用

概念阐述

在SpringCloud原生应用中,通过改变相关配置,让SpringCloud应用使用ServiceComb微服务框架中的Service Center和治理中心。

场景描述

  • SpringCloud应用默认情况下由Spring Cloud Eureka提供在分布式环境下的服务发现和服务注册的功能。

  • ServiceComb微服务框架中的Service Center用于服务元数据以及服务实例元数据的管理和处理注册、发现,同时还支持以下功能:

  • 支持pull/push两种模式监控实例变化

  • 实例动态扩容,海量的长连接或者短连接

  • 支持灰度发布、服务分组等高级管理特性

使用SpringBoot/Cloud开发应用,并让服务运行于ServiceComb微服务SDK容器中,使用其高性能通信、服务治理、分布式事务管理等功能。

配置说明

使用SpringBoot/Cloud开发应用,在原有应用的基础上按照以下步骤进行操作,即可对接ServiceComb的SDK各组件:

注意: 如果使用Java Chassis 0.5.0 以及以前的版本的,请使用io.servicecomb 作为依赖的groupId。

  • 步骤 1 在pom中添加依赖管理dependencyManagement:

     <dependencyManagement>
       <dependencies>
         <dependency>
           <groupId>org.apache.servicecomb</groupId>
           <artifactId>java-chassis-dependencies</artifactId>
           <version>1.0.0-m1</version>
           <type>pom</type>
           <scope>import</scope>
         </dependency>
       </dependencies>
     </dependencyManagement>
    
  • 步骤 2 在pom中添加依赖:

     <dependency>
       <!--让服务运行于微服务sdk容器中-->
       <group>org.apache.servicecomb</group>
       <artifactId>spring-boot-starter-provider</artifactId>
     </dependency>
     <dependency>
       <!--使用服务中心-->
       <group>org.apache.servicecomb</group>
       <artifactId>spring-boot-starter-discovery</artifactId>
     </dependency>
     <dependency>
       <!--让服务运行于Spring boot embedded tomcat中-->
       <group>org.apache.servicecomb</group>
       <artifactId>spring-boot-starter-transport</artifactId>
     </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
     </dependency><dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
     </dependency>
    
  • 步骤 3 配置处理链和协议:

    在resources目录下新建microservice.yaml文件,对服务进行定义,详细定义规则请参考服务定义章节,示例如下:

     APPLICATION_ID: discoverytest
     service_description:
       name: discoveryServer
       version: 0.0.2
     servicecomb:
       service:
         registry:
           address:  http://127.0.0.1:30100 #服务注册中心地址
        rest:
          address: 0.0.0.0:8080 #服务发布的端口
        handler:
          chain:
            Provider:
              default: bizkeeper-provider #调用的处理链
    
  • 步骤4 若要使用ServiceComb的服务中心:

    在pom中添加依赖:

     <dependency>
       <!--使用服务中心-->
       <group>org.apache.servicecomb</group>
       <artifactId>spring-boot-starter-discovery</artifactId>
     </dependency>
    
  • 步骤 5 在启动类添加注解@EnableServiceComb:

     @EnableDiscoveryClient
     @SpringBootApplication
     @EnableServiceComb //新增注解
     public class xxxServer {
       public static void main(String[] args) {
         SpringApplication.run(xxxServer.class, args);
       }
     }
    
  • 步骤 6 定义服务契约,具体请参考服务契约,示例如下:

     // ControllerImpl.class:
     @RestSchema(schemaId = "test")
     @RequestMapping(path = "/compute", produces = MediaType.TEXT_PLAIN)
     public class ControllerImpl {
       @ResponseBody
       @RequestMapping(path = "/hello/{name}", method = RequestMethod.GET)
       public String add(@PathVariable String name) {
         return "hello" + name;
       }
     }
    
  • 步骤 7 启动xxxServer,该服务便可注册到ServiceComb的Service Center。