參考內容:http://blog.didispace.com/spring-cloud-starter-dalston-1/web
服務註冊:spring
在服務治理框架中,一般會構建一個註冊中心,每一個服務單元向註冊中心登記本身提供的服務,將主機與端口號、版本號、通訊協議等一些附加信息告知註冊中心,緩存
註冊中心按服務名分類組織服務清單,註冊中心還以心跳檢測的方式去監控清單中的服務是是否可用,若不可用則從服務中剔除,排除故障。app
Eureka 服務端,服務註冊中心。支持高可用配置,以集羣模式部署,當集羣中有分片出現故障,Eureka轉入自我保護模式,他容許在分片故障期間繼續提供服務的註冊和發現,框架
當故障分片恢復運行時,集羣中的分片會把他們的狀態再次同步回來。spring-boot
Eureka 客戶端,主要處理服務的註冊和發現,客戶端向註冊中心註冊自身提供的服務並週期性的發送心跳來更新他的服務租約。同時他也能能從服務端查詢當前註冊的服務信息,微服務
並把他們緩存到本地,並週期性的刷新服務狀態。測試
搭建服務中心:fetch
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
經過@EnableEurekaServer
註解啓動一個服務註冊中心提供給其餘應用進行對話。這一步很是的簡單,只須要在一個普通的Spring Boot應用中添加這個註解就能開啓此功能,好比下面的例子:ui
@EnableEurekaServer @SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder(Application.class) .web(true).run(args); } }
在默認設置下,該服務註冊中心也會將本身做爲客戶端來嘗試註冊它本身,因此咱們須要禁用它的客戶端註冊行爲,只須要在application.properties
配置文件中增長以下信息:
spring.application.name=eureka-server server.port=1001 eureka.instance.hostname=localhost eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
將服務註冊中心的端口經過server.port屬性設置爲1001。啓動工程後,訪問:http://localhost:1001/,能夠看到下面的頁面,其中尚未發現任何服務。
建立服務提供方
建立提供服務的客戶端,並向服務註冊中心註冊本身。首先,建立一個基本的Spring Boot應用。命名爲eureka-client
,在pom.xml
中,加入以下配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Dalston.SR1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
其次,實現/dc請求處理接口,經過DiscoveryClient對象,在日誌中打印出服務實例的相關內容。
@RestController public class DcController { @Autowired DiscoveryClient discoveryClient; @GetMapping("/dc") public String dc() { String services = "Services: " + discoveryClient.getServices(); System.out.println(services); return services; } }
@EnableDiscoveryClient最後在應用主類中經過加上@EnableDiscoveryClient
註解,該註解能激活Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務信息的輸出。
@SpringBootApplication public class Application { public static void main(String[] args) { new SpringApplicationBuilder( ComputeServiceApplication.class) .web(true).run(args); } }
spring.application.name=eureka-client咱們在完成了服務內容的實現以後,再繼續對application.properties
作一些配置工做,具體以下:
server.port=2001 eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
經過spring.application.name
屬性,咱們能夠指定微服務的名稱後續在調用的時候只須要使用該名稱就能夠進行服務的訪問。eureka.client.serviceUrl.defaultZone
屬性對應服務註冊中心的配置內容,指定服務註冊中心的位置。爲了在本機上測試區分服務提供方和服務註冊中心,使用server.port
屬性設置不一樣的端口。
啓動該工程後,再次訪問:http://localhost:1001/。能夠以下圖內容,咱們定義的服務被成功註冊了。
固然,咱們也能夠經過直接訪問eureka-client
服務提供的/dc
接口來獲取當前的服務清單,只須要訪問:http://localhost:2001/dc,咱們能夠獲得以下輸出返回: