上篇文章講解了SpringCloud組件和概念介紹,接下來講解一下SpringCloud組件相關組件使用、原理和每個組件的作用的,它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路有(Zuul),客戶端負載均衡(Ribbon),Archaius,Turbine等 今天學習的是Eureka即注冊中心
一:Eureka簡介
Eureka是Spring Cloud Netflix的一個子模塊,也是核心模塊之一。用於雲端服務發現,一個基於REST的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移。
服務注冊與發現對於微服務系統來說非常重要。有了服務發現與注冊,你就不需要整天改服務調用的配置文件了,你只需要使用服務的標識符,就可以訪問到服務。他的功能類似於dubbo的注冊中心(register)。
服務發現:服務發現是微服務基礎架構的關鍵原則之一。試圖着手配置每個客戶端或某種格式的約定可以說是非常困難的和非常脆弱的。Eureka是Netflix服務發現的一種服務和客戶端。這種服務是可以被高可用性配置的和部署,並且在注冊的服務當中,每個服務的狀態可以互相復制給彼此。
服務注冊:當一個客戶端注冊到Eureka,它提供關於自己的元數據(諸如主機和端口,健康指標URL,首頁等)Eureka通過一個服務從各個實例接收心跳信息。如果心跳接收失敗超過配置的時間,實例將會正常從注冊里面移除
下圖是基本的服務注冊和發現
二:Eureka服務發現和注冊(創建注冊中心)
1:創建一個基礎的Spring Boot工程,並在pom.xml中引入需要的依賴內容
<?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.demo.springcloud</groupId> <artifactId>eureka_register_service</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <name>eureka_register_service</name> <description>Spring Cloud project</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2:創建一個啟動類Application
package com.demo.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
通過@EnableEurekaServer注解啟動一個服務注冊中心提供給其他應用進行對話。
3:創建一個配置文件 application.properties,注意不要出現空格,否啟動報錯
server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4:執行bluid.sh進行構建,然后執行main方法。本人由於在eclipse下沒有進行手動編譯,啟動的時候一直讀取不到application.properties。
5:查看注冊中心
http://127.0.0.1:8000/ 可以看到如下圖
是不是很簡單啊,那么人要問了,為什么連登陸賬號和密碼都沒有,在外網不是直接能進入注冊中心, 這樣很不安全啊。好,那我們加入登陸賬號和密碼
三:Eureka注冊中心加入權限
1:加入注冊中心需要引入jar,在pom.xml加入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2:配置文件新建一個bootstrap.yml文件
security: basic: enabled: true user: name: admin password: 123
記得重新編譯打包然后執行main方法。
四:注冊一個服務
首先要去掉注冊中心加入的權限,不然服務端會鏈接不上注冊中心進行注冊的,本人還不知怎么配服務端連接注冊中心賬號和密碼的配置。
創建一個biz-serice-0的工程服務,相關代碼我不在這里說明。
執行demo應該能看上面的結果,下圖是注冊中心找到的服務BIZ-SERVICE-0,上圖是服務暴露的接口
下一講講解注冊中心的高可用,我們現在使用的是單一得,容易造成單點故障!!!