什麼是Eureka,爲什麼需要Eureka
eureka在Spring Cloud系列的微服務框架中是一個服務發現組件的角色,通俗來說就是一個消息販子。在微服務框架中,很多功能被拆成了一個個的服務,所謂服務,可以認爲就是項目。比如用戶管理,就可以做一個用戶服務,也就是這個項目,只處理了用戶相關的功能。那麼原先一個單體架構的項目,就可以拆分成一個個的微服務,這個數量可能會很多。而且,這些微服務可能會部署到不同的服務器上面。那麼當用戶請求過來的時候,如何來查找到他所需要的微服務。
這時候,一個角色出現了,那就是服務發現組件。你需要什麼,你直接跟服務組件說,他會告訴你怎麼訪問這個微服務。比如,你對服務發現組件說,我需要登錄,那好,他就把登錄對應的微服務的訪問方式給你。然後,你拿着這個訪問方式,就自己去找登錄的微服務了。這不就是各小說中的百事通嘛。
那麼問題來了,eureka爲什麼會知道各微服務的訪問方式呢?
原來,各微服務如果想要把自己的聯繫方式告訴eureka(這就是註冊),那麼是需要作爲一個eureka的客戶端(eureka-client)。然後,在微服務啓動的時候,就會告訴服務發現組件(eureka-server),我叫啥名字,怎麼聯繫我。到時候,有人來拿着我的名字來找我,你就告訴它我的聯繫方式。那這樣子,服務發現組件就知道了微服務的聯繫方式。
這時候,服務發現組件(eureka-server)對微服務說,我怎麼確保你的聯繫方式是有用的啊,我可不能坑了來我這裏問消息的人。微服務就說了,那我們保持聯繫吧,我每隔一段時間就聯繫一下你,那你就知道我的聯繫方式是有用的啦。(健康檢查)
如何構建一個單體的服務發現組件
- 在pom.xml上添加eureka服務器的依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
給EurekaApplication添加註解@EnableEurekaServer
package com.wangguitang.freedom.study.spring.cloud.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
在配置文件application.yml中添加配置
server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
啓動Eureka服務器
- 右鍵類EurekaApplication,選中Run As–>Spring Boot App
進一步思考
用單體方式部署服務發現組件好不好?當然不好,如果到時候服務發現組件掛了,那麼所有的微服務豈不是都不能訪問了。所以我們不能把雞蛋放到一個籃子裏,我們要多找幾個服務發現組件,如果一個服務發現組件掛了,那麼我們還可以找其他的服務發現組件,這就是集羣。下一步,我們就來學習如何實現服務發現組件的集羣。
最後獻上Spring Cloud的架構圖