微服務Microservice,跟之相對應的是將功能從開發到交付都打包成一個很大的服務單元,通常稱之爲Monolith,也稱「巨石」架構。微服務實現和實施思路更強調功能單一,服務單元小型化和微型化,倡導將服務粒度作小,使它能夠獨立承擔對外服務的職責。前端
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它爲基於JVM的雲應用開發中的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等操做提供了一種簡單的開發方式。java
接下來會以一個簡單的demo來學習Spring Cloud ,地址在github,demo使用maven構建。git
包含幾個子modulegithub
server-discovery:服務發現web
config-service:配置服務spring
user-provider-service:服務提供者docker
user-ui: 消費者,web前端展現apache
api-gateway: 服務網關api
首先配置hosts,操做都以域名訪問 127.0.0.1 discovery config gateway架構
demo中的代碼參考(抄襲)自 https://github.com/kbastani/spring-cloud-microservice-example 和 http://blog.didispace.com/springcloud5/ 以及http://git.oschina.net/itmuch/spring-cloud-study
建立父級項目 spring-cloud-demo,pom文件內容
<?xml version="1.0" encoding="UTF-8"?> <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.dh.cloud</groupId> <artifactId>spring-cloud-demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>server-discovery</module> <module>user-provider-service</module> <module>user-ui</module> <module>api-gateway</module> <module>config-service</module> </modules> <parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Camden.SR1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <docker.plugin.version>0.4.11</docker.plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Camden.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>http://repo.spring.io/libs-snapshot-local</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-snapshots-continuous</id> <name>Spring Snapshots Continuous</name> <url>http://repo.spring.io/libs-snapshot-continuous-local</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>http://repo.spring.io/libs-milestone-local</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-releases</id> <name>Spring Releases</name> <url>http://repo.spring.io/libs-release-local</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>http://repo.spring.io/libs-snapshot-local</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>http://repo.spring.io/libs-milestone-local</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>