下面我們創建提供服務的客戶端,並向服務註冊中心註冊自己。本文我們主要介紹服務的註冊與發現,所以我們不妨在服務提供方中嘗試着提供一個接口來獲取當前所有的服務信息.
1. 首先我們先創建一個SpringBoot 的項目,命名爲:erueka-client 在pom 中添加如下的配置:
======================================================
<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
註解,該註解能激活Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務信息的輸出。
代碼如下圖:
@EnableDiscoveryClient
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(
ClientApplication.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,我們可以得到如下輸出返回:
其中,方括號中的eureka-client
就是通過Spring Cloud定義的DiscoveryClient
接口在eureka的實現中獲取到的所有服務清單。由於Spring Cloud在服務發現這一層做了非常好的抽象,所以,對於上面的程序,我們可以無縫的從eureka的服務治理體系切換到consul的服務治理體系中區。
Spring Cloud Consul
Spring Cloud Consul項目是針對Consul的服務治理實現。Consul是一個分佈式高可用的系統,它包含多個組件,但是作爲一個整體,在微服務架構中爲我們的基礎設施提供服務發現和服務配置的工具。它包含了下面幾個特性:
- 服務發現
- 健康檢查
- Key/Value存儲
- 多數據中心
由於Spring Cloud Consul項目的實現,我們可以輕鬆的將基於Spring Boot的微服務應用註冊到Consul上,並通過此實現微服務架構中的服務治理。
以之前實現的基於Eureka的示例(eureka-client)爲基礎,我們如何將之前實現的服務提供者註冊到Consul上呢?方法非常簡單,我們只需要在pom.xml
中將eureka的依賴修改爲如下依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency>
接下來再修改一下application.properites
,將consul需要的配置信息加入即可,比如:(下面配置是默認值)
spring.cloud.consul.host=localhost spring.cloud.consul.port=8500 |
到此爲止,我們將eureka-client轉換爲基於consul服務治理的服務提供者就完成了。前文我們已經有提到過服務發現的接口DiscoveryClient
是Spring Cloud對服務治理做的一層抽象,所以可以屏蔽Eureka和Consul服務治理的實現細節,我們的程序不需要做任何改變,只需要引入不同的服務治理依賴,並配置相關的配置屬性就能輕鬆的將微服務納入Spring Cloud的各個服務治理框架中。
下面可以嘗試讓consul的服務提供者運行起來。這裏可能讀者會問,不需要創建類似eureka-server的服務端嗎?由於Consul自身提供了服務端,所以我們不需要像之前實現Eureka的時候創建服務註冊中心,直接通過下載consul的服務端程序就可以使用。
(
做服務發現的框架常用的有
- zookeeper
- eureka
- etcd
- consul
)
到官網上面下載consul 服務器:
https://www.consul.io/downloads.html
環境變量配置:
在安裝的位置解壓得到 consul.exe 文件(我的解壓位置是:D:\Program Files\consul)
環境變量增加一條:
環境變量
增加一條D:\Program Files\consul
啓動
cmd 命令窗口執行:consul agent -dev
consul 自帶 UI 界面,打開網址:http://localhost:8500 ,可以看到當前註冊的服務界面
cmd 命令窗口執行:consul.exe agent -server ui -bootstrap -client 0.0.0.0 -data-dir="E:\consul" -bind X.X.X.X
其中X.X.X.X爲服務器ip,即可使用http://X.X.X.X:8500 訪問ui而不是隻能使用localhost連接
具體啓動命令如下圖所示:
啓動之前得項目,進入界面訪問: