Spring Cloud爲開發人員提供了快速構建分佈式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智能路由,微代理,控制總線)。分佈式系統的協調致使了樣板模式, 使用Spring Cloud開發人員能夠快速地支持實現這些模式的服務和應用程序。他們將在任何分佈式環境中運行良好,包括開發人員本身的筆記本電腦,裸機數據中心,以及Cloud Foundry等託管平臺。html
以上內容爲官方直譯
Spring Boot | 2.0.1.RELEASE |
Spring Cloud | Finchley RC1 |
SpringCloud項目基於SpringBoot,因此學習SpringCloud以前須要對SpringBoot有必定的瞭解。
服務發現是基於微服務架構的關鍵原則之一。Spring Cloud Netflix組件上的Eureka是一個服務註冊與發現的模塊(包含客戶端和服務端)。能夠將服務器配置和部署爲高可用性,每一個服務器將註冊服務的狀態複製到其餘服務器。Eureka是一個高可用的組件,它沒有後端緩存,每個實例註冊以後須要向註冊中心發送心跳(所以能夠在內存中完成)。java
1. pom.xml
中引入相關Maven依賴web
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-server --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:
Eureka Server引入的Maven依賴中artifactId
有變更,SpringBoot2.0以前
的版本爲spring-cloud-starter-eureka-server
2. SpringBoot啓動器添加註解spring
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
3. application.yml
配置後端
spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
上述配置文件描述一個單節點註冊中心,默認狀況下Eureka Server也是一個Eureka Client,可經過eureka.client.registerWithEureka:false
和fetchRegistry:false
來代表本身是一個Eureka Server。默認這兩個屬性值爲true
。
至此Eureka Server服務註冊中心配置完畢。緩存
4. 運行概覽圖安全
啓動工程,訪問 http://localhost:8761
由於沒有服務註冊,因此顯示 No Instances Available
1. pom.xml
中引入相關Maven依賴服務器
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:
Eureka Client引入的Maven依賴中artifactId
有變更,SpringBoot2.0以前
的版本爲spring-cloud-starter-eureka
2. SpringBoot啓動器添加註解架構
@EnableEurekaClient @SpringBootApplication @RestController public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } @Value("${server.port}") String port; @RequestMapping("/hi") public String home(@RequestParam String name) { return "hi "+name+",i am from port:" +port; } }
在這個例子中,咱們明確地使用@EnableEurekaClient
,但只有Eureka
可用,你也可使用@EnableDiscoveryClient
。
3. application.yml
配置app
spring: application: name: service-hi server: port: 8762 eureka: client: service-url: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ management: endpoints: web: exposure: include: "*"
Eureka Client提供者只須要註明註冊自身服務的服務註冊中心的地址便可。當客戶端註冊Eureka Server時,它提供關於自身的元數據,例如主機和端口,健康指示符URL,主頁等。Eureka從屬於服務的每一個實例接收心跳消息。若是心跳失敗超過可配置的時間表,則一般將該實例從註冊表中刪除。其中
defaultZone
是一個魔術字符串後備值,爲任何不表示首選項的客戶端提供服務URL(即它是有用的默認值)。須要指明
spring.application.name
,這個很重要,這在之後的服務與服務之間相互調用通常都是根據這個name 。
注意:
SpringBoot2.0以後
大部分endpoints
不會被暴露,上面咱們暴露了全部endpoints,如應用到生產環境,考慮到安全問題,對於Actuator的Endpoints
請根據須要進行配置
至此Eureka Client服務提供者配置完畢。
4. 運行概覽圖
啓動工程,訪問 http://localhost:8761
服務名爲SERVICE-HI已經註冊到註冊中心。
打開 http://localhost:8762/hi?name... ,返回以下結果:
hi forezp,i am from port:8762