springcloud系列教程|第三章:服務發現元件-eureka
服務發現-eureka
1:前言
上一篇:springcloud系列教程|第二篇:服務提供者和服務消費者講解了服務提供者和服務消費者的概念,以及使用了小栗子演示了兩個微服務之間的呼叫,那麼接下來將會介紹服務發現-eureka 以及它的使用。
2:環境準備
JDK 1.8
IDEA
Maven 3.3.9
springboot 1.5.x
springcloud Dalston.SR5
3:為什麼要使用服務發現
對於執行在物理硬體上的傳統應用,服務例項的網路位置(ip和埠號)是相對固定的,可以從配置檔案中去讀取。然而對於基於雲端的、現代化微服務來說,卻是不可取的,因為服務例項的網路位置經常動態改變,你不可能去通過配置檔案配置固定IP和埠去查詢,所以需要使用服務發現機制。
服務發現機制分為兩部分:客戶端服務發現和服務端服務發現。
3.1 客戶端發現
從圖中分析:服務A是服務消費者,服務B是服務提供者,他們都被服務登錄檔管理著,而此時的服務A是作為客戶端去呼叫服務B,也就意味著客戶端決定被呼叫服務B的網路位置,客戶端佔著主導地位。
3.2 服務端發現
同樣是服務A請求B服務,但是這次不同的是,服務A的請求是將服務傳送到負載均衡,由負載均衡路由到指定的B服務,它佔著主導地位。
4:服務登錄檔
通過上面的兩種服務發現模式,也不難想象服務登錄檔就是整個服務發現的核心部分,是包含服務例項的網路地址的資料庫。服務登錄檔需要高可用而且隨時更新。客戶端能夠快取從服務登錄檔中獲取的網路地址,當這些資訊過時,客戶端和服務端也無法發現服務。因此,服務登錄檔會包含若干個,使用複製協議保持一致性。
Netflix Eureka 是客戶端服務登錄檔的典型代表,為註冊和請求服務例項提供了 REST API。服務例項使用 POST 請求來註冊網路地址,每三十秒使用 PUT 請求來重新整理註冊資訊。註冊資訊也能通過 HTTP DELETE 請求或者例項超時來被移除。以此類推,客戶端能夠使用 HTTP GET 請求來檢索已註冊的服務例項。那麼接下來我們將重點介紹Eureka 的原理以及使用。
5:Netflix Eureka簡介
Eureka是Spring Cloud Netflix微服務套件中的一部分,可以與Springboot構建的微服務很容易的整合起來。Eureka包含了伺服器端和客戶端元件。伺服器端,也被稱作是服務註冊中心,用於提供服務的註冊與發現。客戶端元件包含服務消費者與服務生產者(也就是我們所看到的服務A,服務B,服務C…….
6:實戰-編寫Eureka服務端
新建Eureka服務端專案:
找到如圖所示的地方,把這裡的pom檔案拷貝到你剛新建的專案下: 注意引入完成之後要更改eureka的pom檔案,spring-cloud-starter-eureka -> spring-cloud-starter-eureka-server
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.13.RELEASE</version>
</parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
/*因為這是eureka的伺服器端,所以要引入eureka的服務端依賴*/
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
接下來配置一下application.yml檔案:
server:
port: 8888
eureka:
client:
register-with-eureka: false #表示是否註冊到eureka伺服器中,因為它就是eureka伺服器所以沒有必要
fetch-registry: false #fetchRegistry表示是否從eureka伺服器獲取註冊資訊 因為它本身就是伺服器,所以也沒有必要
service-url:
defaultZone: http://localhost:8888/eureka #rureka的服務端地址
最後一步:添加註解
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
我們來看看eureka的服務端長的什麼樣子:
7:實戰-編寫Eureka客戶端服務提供者
請檢視這篇springcloud系列教程|第二篇:服務提供者和服務消費者去獲取程式碼,同樣分別需要在pom檔案、application.yml和啟動類做一點改動,如下:
pom檔案新增兩段:注意這裡的spring-cloud-starter-eureka沒有加-server,因為它是服務端
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
application.yml配置:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8888/eureka
instance:
prefer-ip-address: true #滑鼠移動到地址上會顯示ip地址
啟動類配置:
@EnableEurekaClient
@SpringBootApplication
@MapperScan("com.springcloud.microserivceprovider.mapper")
public class MicroserivceProviderApplication {
public static void main(String[] args)
{
SpringApplication.run(MicroserivceProviderApplication.class, args);
}
}
eureka客戶端服務消費者配置跟服務提供者一模一樣,這裡就不再贅述,我將提供原始碼給大家參考學習,有問題可以私聊或者留言,天天會看的哦。
最後我們看到eureka伺服器上註冊了兩個服務:
加入群聊一起學習springcloud:877750371
如果有小夥伴覺得我寫的不錯的話可以關注一下我的部落格,我會一直持續更新,也可以支援一下我的公眾號哦:coldStone,主要會分享分散式系統相關的一系列技術,目前會推出springboot、springcloud和docker系列教程,後期會有關於中介軟體以及各個層面的效能優化的文章,同時還會分享一些賺錢理財的小套路哦,歡迎大家來支援,一起學習成長,程式設計師不僅僅是搬瓦工!