利用SpringCloud搭建一個最簡單的微服務框架
阿新 • • 發佈:2019-01-05
1.微服務
微服務主要包含服務註冊,服務發現,服務路由,服務配置,服務熔斷,服務降級等一系列的服務,而Spring Cloud為我們提供了個一整套的服務;
本例子為你提供了最簡單的一個服務發現例子,包含服務註冊發現spingCloudEurekaServer、服務配置中心spingCloudConfServer、以及一個app應用springCloudApp
2.服務註冊與發現
spingCloudEurekaServer
pom.xml
Application.java<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>
package 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替代)
server: 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
<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
package 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
server.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
<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
package 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
package 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
server.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