• 利用SpringCloud搭建一个最简单的微服务框架


    1.微服务

    微服务主要包含服务注册,服务发现,服务路由,服务配置,服务熔断,服务降级等一系列的服务,而Spring Cloud为我们提供了个一整套的服务;

    本例子为你提供了最简单的一个服务发现例子,包含服务注册发现spingCloudEurekaServer、服务配置中心spingCloudConfServer、以及一个app应用springCloudApp

    2.服务注册与发现

    spingCloudEurekaServer

    pom.xml

    1.  
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    2.  
      <modelVersion>4.0.0</modelVersion>
    3.  
      <groupId>com.caicongyang</groupId>
    4.  
      <artifactId>spingCloudEurekaServer</artifactId>
    5.  
      <version>0.0.1-SNAPSHOT</version>
    6.  
      <parent>
    7.  
      <groupId>org.springframework.cloud</groupId>
    8.  
      <artifactId>spring-cloud-starter-parent</artifactId>
    9.  
      <version>Angel.SR6</version>
    10.  
      </parent>
    11.  
      <dependencies>
    12.  
      <dependency>
    13.  
      <groupId>org.springframework.cloud</groupId>
    14.  
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
    15.  
      </dependency>
    16.  
      </dependencies>
    17.  
      <build>
    18.  
      <plugins>
    19.  
      <plugin>
    20.  
      <groupId>org.springframework.boot</groupId>
    21.  
      <artifactId>spring-boot-maven-plugin</artifactId>
    22.  
      </plugin>
    23.  
      </plugins>
    24.  
      </build>
    25.  
      </project>

    Application.java

    1.  
      package com.caicongyang.eureka;
    2.  
       
    3.  
      import org.springframework.boot.SpringApplication;
    4.  
      import org.springframework.boot.autoconfigure.SpringBootApplication;
    5.  
      import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    6.  
       
    7.  
      /**
    8.  
      * Spring could EurekaServer程序主入口
    9.  
      *
    10.  
      * @author Administrator
    11.  
      *
    12.  
      */
    13.  
      @SpringBootApplication
    14.  
      @EnableEurekaServer
    15.  
      public class Application {
    16.  
      public static void main(String[] args) {
    17.  
      SpringApplication.run(Application.class, args);
    18.  
      }
    19.  
      }

    application.yml  (可用properties替代)

    1.  
      server:
    2.  
      port: 9999
    3.  
      eureka:
    4.  
      instance:
    5.  
      hostname: 127.0.0.1
    6.  
      client:
    7.  
      registerWithEureka: false
    8.  
      fetchRegistry: false
    9.  
      serviceUrl:
    10.  
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/



    3.服务配置(全局配置中心)

    pom.xml

    1.  
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2.  
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    3.  
      <modelVersion>4.0.0</modelVersion>
    4.  
      <groupId>com.caicongyang</groupId>
    5.  
      <artifactId>spingCloudConfServer</artifactId>
    6.  
      <version>0.0.1-SNAPSHOT</version>
    7.  
       
    8.  
      <parent>
    9.  
      <groupId>org.springframework.cloud</groupId>
    10.  
      <artifactId>spring-cloud-starter-parent</artifactId>
    11.  
      <version>Angel.SR6</version>
    12.  
      </parent>
    13.  
      <dependencies>
    14.  
      <dependency>
    15.  
      <groupId>org.springframework.cloud</groupId>
    16.  
      <artifactId>spring-cloud-config-server</artifactId>
    17.  
      </dependency>
    18.  
      <!-- sping cloud 注册服务 -->
    19.  
      <dependency>
    20.  
      <groupId>org.springframework.cloud</groupId>
    21.  
      <artifactId>spring-cloud-starter-eureka</artifactId>
    22.  
      </dependency>
    23.  
      <dependency>
    24.  
      <groupId>org.springframework.boot</groupId>
    25.  
      <artifactId>spring-boot-starter-test</artifactId>
    26.  
      <scope>test</scope>
    27.  
      </dependency>
    28.  
      </dependencies>
    29.  
       
    30.  
      <build>
    31.  
      <plugins>
    32.  
      <plugin>
    33.  
      <groupId>org.springframework.boot</groupId>
    34.  
      <artifactId>spring-boot-maven-plugin</artifactId>
    35.  
      </plugin>
    36.  
      </plugins>
    37.  
      <defaultGoal>compile</defaultGoal>
    38.  
      </build>
    39.  
      </project>

    application.java

    1.  
      package com.caiconyang.conf;
    2.  
       
    3.  
      import org.springframework.boot.SpringApplication;
    4.  
      import org.springframework.boot.autoconfigure.SpringBootApplication;
    5.  
      import org.springframework.cloud.config.server.EnableConfigServer;
    6.  
       
    7.  
      /**
    8.  
      * Spring could conf程序主入口
    9.  
      * @author Administrator
    10.  
      *
    11.  
      */
    12.  
      @SpringBootApplication
    13.  
      @EnableConfigServer
    14.  
      public class Application {
    15.  
      public static void main(String[] args) {
    16.  
      SpringApplication.run(Application.class,args);
    17.  
      }
    18.  
      }


    application.properties

    1.  
      server.port=8888
    2.  
      ## App配置文件所在git地址
    3.  
      spring.cloud.config.server.git.uri=https://git.oschina.net/caicongyang/springCloudConfigRepo.git
    4.  
      spring.cloud.config.server.git.searchPaths=repo
    5.  
      spring.application.name=spingCloudConfServer

    4.App

    pom.xml

    1.  
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    2.  
      <modelVersion>4.0.0</modelVersion>
    3.  
      <groupId>com.caicongyang</groupId>
    4.  
      <artifactId>springCloudApp</artifactId>
    5.  
      <version>0.0.1-SNAPSHOT</version>
    6.  
       
    7.  
      <parent>
    8.  
      <groupId>org.springframework.cloud</groupId>
    9.  
      <artifactId>spring-cloud-starter-parent</artifactId>
    10.  
      <version>Angel.SR6</version>
    11.  
      </parent>
    12.  
      <properties>
    13.  
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    14.  
      <java.version>1.7</java.version>
    15.  
      <java.encoding>UTF-8</java.encoding>
    16.  
      <springfox.swagger.version>2.2.2</springfox.swagger.version>
    17.  
      </properties>
    18.  
      <dependencies>
    19.  
      <dependency>
    20.  
      <groupId>org.springframework.boot</groupId>
    21.  
      <artifactId>spring-boot-starter-web</artifactId>
    22.  
      </dependency>
    23.  
      <!-- sping cloud 监控 http://localhost:8080/health -->
    24.  
      <dependency>
    25.  
      <groupId>org.springframework.boot</groupId>
    26.  
      <artifactId>spring-boot-starter-actuator</artifactId>
    27.  
      </dependency>
    28.  
      <dependency>
    29.  
      <groupId>org.springframework.cloud</groupId>
    30.  
      <artifactId>spring-cloud-starter-config</artifactId>
    31.  
      </dependency>
    32.  
      <!-- sping cloud 注册服务 -->
    33.  
      <dependency>
    34.  
      <groupId>org.springframework.cloud</groupId>
    35.  
      <artifactId>spring-cloud-starter-eureka</artifactId>
    36.  
      </dependency>
    37.  
      <!-- sping cloud 路由 -->
    38.  
      <dependency>
    39.  
      <groupId>org.springframework.cloud</groupId>
    40.  
      <artifactId>spring-cloud-starter-hystrix</artifactId>
    41.  
      </dependency>
    42.  
       
    43.  
      <dependency>
    44.  
      <groupId>org.springframework.boot</groupId>
    45.  
      <artifactId>spring-boot-starter-test</artifactId>
    46.  
      <scope>test</scope>
    47.  
      </dependency>
    48.  
      <dependency>
    49.  
      <groupId>io.springfox</groupId>
    50.  
      <artifactId>springfox-swagger2</artifactId>
    51.  
      <version>${springfox.swagger.version}</version>
    52.  
      </dependency>
    53.  
      <dependency>
    54.  
      <groupId>io.springfox</groupId>
    55.  
      <artifactId>springfox-swagger-ui</artifactId>
    56.  
      <version>${springfox.swagger.version}</version>
    57.  
      </dependency>
    58.  
      </dependencies>
    59.  
       
    60.  
       
    61.  
      <build>
    62.  
      <finalName>spingcould</finalName>
    63.  
      <plugins>
    64.  
      <plugin>
    65.  
      <groupId>org.apache.maven.plugins</groupId>
    66.  
      <artifactId>maven-compiler-plugin</artifactId>
    67.  
      <configuration>
    68.  
      <source>${java.version}</source>
    69.  
      <target>${java.version}</target>
    70.  
      <encoding>${java.encoding}</encoding>
    71.  
      <showWarnings>true</showWarnings>
    72.  
      </configuration>
    73.  
      </plugin>
    74.  
      </plugins>
    75.  
      </build>
    76.  
       
    77.  
       
    78.  
      </project>


    Application.java

    1.  
      package com.caicongyang.springCloudApp.main;
    2.  
       
    3.  
      import org.springframework.boot.SpringApplication;
    4.  
      import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    5.  
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    6.  
      import org.springframework.context.annotation.ComponentScan;
    7.  
      import org.springframework.context.annotation.Configuration;
    8.  
       
    9.  
      /**
    10.  
      * Spring could web程序主入口
    11.  
      * @author Administrator
    12.  
      *
    13.  
      */
    14.  
      @Configuration//配置控制
    15.  
      @EnableAutoConfiguration//启用自动配置
    16.  
      @ComponentScan(value={"com.caicongyang.springCloudApp"})//组件扫描
    17.  
      @EnableDiscoveryClient
    18.  
      public class Application {
    19.  
      public static void main(String[] args) {
    20.  
      //第一个简单的应用,
    21.  
      SpringApplication.run(Application.class,args);
    22.  
      }
    23.  
      }

    SwaggerConfig.java

    1.  
      package com.caicongyang.springCloudApp.conf;
    2.  
       
    3.  
      import org.springframework.beans.factory.annotation.Value;
    4.  
      import org.springframework.context.annotation.Bean;
    5.  
      import org.springframework.context.annotation.Configuration;
    6.  
       
    7.  
      import springfox.documentation.service.ApiInfo;
    8.  
      import springfox.documentation.spi.DocumentationType;
    9.  
      import springfox.documentation.spring.web.plugins.Docket;
    10.  
      import springfox.documentation.swagger2.annotations.EnableSwagger2;
    11.  
       
    12.  
      /**
    13.  
      *
    14.  
      * @author caicongyang1
    15.  
      * @version id: SwaggerConfig, v 0.1 16/4/22 下午4:12 caicongyang1 Exp $$
    16.  
      */
    17.  
      @Configuration
    18.  
      @EnableSwagger2
    19.  
      public class SwaggerConfig {
    20.  
       
    21.  
      @Value("${swagger.ui.enable}") //该配置项在配置中心管理
    22.  
      private boolean environmentSpecificBooleanFlag;
    23.  
       
    24.  
      @Bean
    25.  
      public Docket docketFactory() {
    26.  
      return new Docket(DocumentationType.SWAGGER_2).apiInfo(
    27.  
      new ApiInfo("接口文档", "SpingCloud web接口列表", "1.0", "", "", "", "")).enable(environmentSpecificBooleanFlag);
    28.  
      }
    29.  
      }

    application.properties

    1.  
      server.port=8080
    2.  
      spring.cloud.config.uri=http://127.0.0.1:8888
    3.  
      spring.cloud.config.name=springCloudApp
    4.  
      spring.cloud.config.profile=${config.profile:dev}
    5.  
      #service discovery url
    6.  
      eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/
    7.  
      #service name
    8.  
      spring.application.name=springCloudApp


    5.测试与验证

    顺序启动服务注册发现spingCloudEurekaServer、服务配置中心spingCloudConfServer、以及一个app应用springCloudApp

    测试与验证

    1.访问http://localhost:9999/eureka/  app是否已经注册上来

    2.访问 http://localhost:8080/swagger-ui.html 是否正常访问,如果正常访问说明争取读取到config配置中心的swagger.ui.enable配置项

    6.源码:

    以上所有源码:

    https://git.oschina.net/caicongyang/springcloud.git

     

  • 相关阅读:
    python-初始网络编程
    mysql 之优化
    python 操作Mysql
    白话SCRUM之一:SCRUM 的三个角色
    白话SCRUM 之三:sprint backlog
    Scrum 之 product Backlog
    9.为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗?
    8.如何自己设计一个类似 Dubbo 的 RPC 框架?
    7.分布式服务接口请求的顺序性如何保证?
    6.分布式服务接口的幂等性如何设计(比如不能重复扣款)?
  • 原文地址:https://www.cnblogs.com/kkdn/p/9334255.html
Copyright © 2020-2023  润新知