您的位置:首页 > 编程语言 > Java开发

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

2018-03-06 15:59 716 查看
原文地址:http://blog.csdn.net/caicongyang/article/details/52974406

1.微服务

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


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

2.服务注册与发现

spingCloudEurekaServer
pom.xml[html] view plain copy<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">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.caicongyang</groupId>  
  <artifactId>spingCloudEurekaServer</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
    <parent>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-starter-parent</artifactId>  
        <version>Angel.SR6</version>  
    </parent>  
    <dependencies>          
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-starter-eureka-server</artifactId>  
        </dependency>  
    </dependencies>  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-maven-plugin</artifactId>  
            </plugin>  
        </plugins>  
    </build>  
</project>  
Application.java[java] view plain copypackage com.caicongyang.eureka;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;  
  
/** 
 * Spring could EurekaServer程序主入口 
 *  
 * @author Administrator 
 * 
 */  
@SpringBootApplication  
@EnableEurekaServer  
public class Application {  
    public static void main(String[] args) {  
        SpringApplication.run(Application.class, args);  
    }  
}  
application.yml  (可用properties替代)[plain] view plain copyserver:   
      port: 9999  
eureka:  
       instance:   
           hostname: 127.0.0.1  
       client:   
            registerWithEureka: false  
            fetchRegistry: false  
            serviceUrl:   
                     defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  

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

pom.xml[html] view plain copy<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">  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.caicongyang</groupId>  
    <artifactId>spingCloudConfServer</artifactId>  
    <version>0.0.1-SNAPSHOT</version>  
  
    <parent>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-starter-parent</artifactId>  
        <version>Angel.SR6</version>  
    </parent>  
    <dependencies>  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-config-server</artifactId>  
        </dependency>  
        <!-- sping cloud 注册服务 -->  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-starter-eureka</artifactId>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-test</artifactId>  
            <scope>test</scope>  
        </dependency>  
    </dependencies>  
  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.springframework.boot</groupId>  
                <artifactId>spring-boot-maven-plugin</artifactId>  
            </plugin>  
        </plugins>  
        <defaultGoal>compile</defaultGoal>  
    </build>  
</project>  
application.java[java] view plain copypackage com.caiconyang.conf;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  
import org.springframework.cloud.config.server.EnableConfigServer;  
  
/** 
 * Spring could conf程序主入口 
 * @author Administrator 
 * 
 */  
@SpringBootApplication  
@EnableConfigServer  
public class Application {  
    public static void main(String[] args) {     
        SpringApplication.run(Application.class,args);     
    }     
}  

application.properties[plain] view plain copyserver.port=8888  
## App配置文件所在git地址  
spring.cloud.config.server.git.uri=https://git.oschina.net/caicongyang/springCloudConfigRepo.git  
spring.cloud.config.server.git.searchPaths=repo  
spring.application.name=spingCloudConfServer  

4.App

pom.xml[html] view plain copy<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">  
  <modelVersion>4.0.0</modelVersion>  
  <groupId>com.caicongyang</groupId>  
  <artifactId>springCloudApp</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
    
    <parent>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-starter-parent</artifactId>  
        <version>Angel.SR6</version>  
    </parent>  
  <properties>  
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
        <java.version>1.7</java.version>  
        <java.encoding>UTF-8</java.encoding>  
        <springfox.swagger.version>2.2.2</springfox.swagger.version>  
    </properties>  
  <dependencies>  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-web</artifactId>  
        </dependency>  
        <!-- sping cloud 监控  http://localhost:8080/health -->  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-actuator</artifactId>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-starter-config</artifactId>  
        </dependency>  
        <!-- sping cloud 注册服务 -->  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-starter-eureka</artifactId>  
        </dependency>  
            <!-- sping cloud 路由 -->  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-starter-hystrix</artifactId>  
        </dependency>  
  
        <dependency>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-test</artifactId>  
            <scope>test</scope>  
        </dependency>  
        <dependency>  
            <groupId>io.springfox</groupId>  
            <artifactId>springfox-swagger2</artifactId>  
            <version>${springfox.swagger.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>io.springfox</groupId>  
            <artifactId>springfox-swagger-ui</artifactId>  
            <version>${springfox.swagger.version}</version>  
        </dependency>  
    </dependencies>  
      
    
  <build>  
        <finalName>spingcould</finalName>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <configuration>  
                    <source>${java.version}</source>  
                    <target>${java.version}</target>  
                    <encoding>${java.encoding}</encoding>  
                    <showWarnings>true</showWarnings>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>  
    
    
</project>  

Application.java[java] view plain copypackage com.caicongyang.springCloudApp.main;  
  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;  
import org.springframework.context.annotation.ComponentScan;  
import org.springframework.context.annotation.Configuration;  
  
/** 
 * Spring could web程序主入口 
 * @author Administrator 
 * 
 */  
@Configuration//配置控制    
@EnableAutoConfiguration//启用自动配置    
@ComponentScan(value={"com.caicongyang.springCloudApp"})//组件扫描    
@EnableDiscoveryClient  
public class Application {  
    public static void main(String[] args) {     
        //第一个简单的应用,     
        SpringApplication.run(Application.class,args);     
    }     
}  
SwaggerConfig.java[java] view plain copypackage com.caicongyang.springCloudApp.conf;  
  
import org.springframework.beans.factory.annotation.Value;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
  
import springfox.documentation.service.ApiInfo;  
import springfox.documentation.spi.DocumentationType;  
import springfox.documentation.spring.web.plugins.Docket;  
import springfox.documentation.swagger2.annotations.EnableSwagger2;  
  
/** 
 * 
 * @author caicongyang1 
 * @version id: SwaggerConfig, v 0.1 16/4/22 下午4:12 caicongyang1 Exp $$ 
 */  
@Configuration  
@EnableSwagger2  
public class SwaggerConfig {  
  
    @Value("${swagger.ui.enable}") //该配置项在配置中心管理  
    private boolean environmentSpecificBooleanFlag;  
      
    @Bean  
    public Docket docketFactory() {  
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(  
           new ApiInfo("接口文档", "SpingCloud web接口列表", "1.0", "", "", "", "")).enable(environmentSpecificBooleanFlag);  
    }  
}  
application.properties[plain] view plain copyserver.port=8080  
spring.cloud.config.uri=http://127.0.0.1:8888  
spring.cloud.config.name=springCloudApp  
spring.cloud.config.profile=${config.profile:dev}  
#service discovery url  
eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/  
#service name  
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: