springBootVersion = '2.0.3.RELEASE'
springCloudVersion = 'Finchley.RELEASE'
1、服務發現和服務注冊
服務發現:如何提供給客戶端一個可用的服務?客戶端自己找,還是服務器端幫它找。
● 客戶端發現:客戶端查詢服務注冊表,然后使用負載均衡算法從中選擇一個實例,並發出請求。
● 服務器端發現:客戶端通過負載均衡器向某個服務提出請求,負載均衡器查詢服務注冊表,並將請求轉發到可用的服務實例。
服務注冊:
● 自注冊:服務實例自己注冊
● 第三方注冊模式:服務注冊器會通過查詢部署環境或訂閱事件的方式來跟蹤運行實例的更改。一旦偵測到有新的可用服務實例,會向注冊表注冊此服務。服務管理器也負責注銷終止的服務實例。
2、Region和Zone
Region:根據地理位置我們把某個地區的基礎設施服務集合稱為一個區域。通過AWS的區域,一方面可以使得AWS雲服務在地理位置上更加靠近我們的用戶,另一方面使得用戶可以選擇不同的區域存儲他們的數據以滿足當地法規遵循方面的要求。
Availability Zone:AWS的每個區域一般由多個可用區(AZ)組成,而一個可用區一般是由多個數據中心組成。AWS引入可用區設計主要是為了提升用戶應用程序的高可用性。因為可用區與可用區之間在設計上是相互獨立的,也就是說它們會有獨立的供電、獨立的網絡等,這樣假如一個可用區出現問題時也不會影響另外的可用區。
感覺是容災備份的概念,比如某公司在北京有兩個機房,一個在亦庄,一個在上地,每個機房都有一個Eureka Server,這兩個Eureka Server的Region和Zone的配置
Eureka Server1
Region:beijing
Zone:yizhuang
Eureka Server2
Region:beijing
Zone:shangdi
3、Eureka架構
4、Eureka 實戰
【最簡單的Eureka Server】
1)主類
@EnableEurekaServer
2)application.yml (Standalone Eureka Server)
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
在瀏覽器中輸入http://localhost:8761/
3)依賴
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
如果gradle找不到Eureka的包,在build.gradle中添加如下內容
原因:Due to Gradle’s dependency resolution rules and the lack of a parent bom feature
ext { springCloudVersion = 'Finchley.RELEASE' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } }
【注冊服務到Eureka Sever】
1)主類
@EnableEurekaClient
@EnableDiscoveryClient 更通用,不限於Eureka
2.0 不需要加這個注解,只要類路徑下有spring-cloud-starter-netflix-eureka-client。
2)application.yml
spring: application: name: user-service eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/
3)依賴
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
如果gradle找不到Eureka的包,Due to Gradle’s dependency resolution rules and the lack of a parent bom feature
參見Eureka Server中build.gradle的相關配置。