Spring Cloud 一:服務註冊與發現(Eureka)【Dalston版】
Spring Cloud簡介
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態管理等操作提供了一種簡單的開發方式。
微服務架構
那麽什麽是“微服務架構”呢?簡單的說,微服務架構就是將一個完整的應用從數據存儲開始垂直拆分成多個不同的服務,每個服務都能獨立部署、獨立維護、獨立擴展,服務與服務間通過諸如RESTful API的方式互相調用。
服務治理
Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一
它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。
一、創建“服務註冊中心”
創建一個基礎的Spring Boot工程,命名為eureka-server pom.xml
<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.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> </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
註解啟動一個服務註冊中心提供給其他應用進行對話。
@EnableEurekaServer @SpringBootApplication public class AppleApplication { public static void main(String[] args) { new SpringApplicationBuilder(AppleApplication.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
啟動工程後,訪問: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 />
</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 ComputeController { @Autowired DiscoveryClient discoveryClient; @GetMapping("/dc") public String dc() { String services = "Services: " + discoveryClient.getServices(); System.out.println(services); return services; } }
最後在應用主類中通過加上@EnableDiscoveryClient
註解,該註解能激活Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務信息的輸出。
@EnableDiscoveryClient @SpringBootApplication public class AppleApplication { public static void main(String[] args) { new SpringApplicationBuilder( AppleApplication.class) .web(true).run(args); } }
我們在完成了服務內容的實現之後,再繼續對application.properties
做一些配置工作,具體如下:
spring.application.name=eureka-client 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,我們可以得到如下輸出返回:
Spring Cloud 一:服務註冊與發現(Eureka)【Dalston版】