Spring Cloud中使用Eureka來做服務注冊和發現,來統一管理微服務實例。
1.使用IDEA創建一個空的Maven項目做父模塊
(也可以不用父項目,所有模塊都用平行結構)
刪除父模塊src文件夾
可使用Spring Initializr來創建模塊或者創建Maven項目手動添加依賴
2.使用Spring Initializr創建Eureka Server
選擇SDK 1.8
Artifact填寫對應模塊的名稱
依次選擇Cloud Discovery->Eureka Server,Spring Boot默認選擇的是2.0.4
可以參考Spring Cloud官方對應的Spring Cloud版本對應組件的版本,可以看到Finchley.SR1對應的是Spring Boot 2.0.4.RELEASE版
https://projects.spring.io/spring-cloud/
創建好后會還原Maven項目的依賴,需要一段時間。
2.1配置Eureka Server注解
還原成功后會生成一個模塊名稱+Application的啟動類,在類名上加上@EnableEurekaServer注解用來申明這是個Eureka服務器
2.2配置Eureka Server配置文件
配置文件可參考號官方文檔,找到對應的Spring Cloud版本,點擊Reference。
搜索找到Standalone Mode單機模式
將項目中的application.properties后綴名改為yml,把application.yml的配置文件內容復制到項目中。
port為服務的端口,可以自定義,我這里把端口改為了8881
idea使用Debug啟動成功后,在瀏覽器輸入:http://localhost:8881/ 有一下內容則說明該服務啟動成功。
3.使用Maven項目創建Eureka Server
創建一個空的Maven項目,在父模塊創建的會自動選中父模塊
將項目中的pom文件parent節點全部刪除,到Spring Cloud官網復制Maven項目的依賴相關內容到pom文件的project節點下
官網的依賴文件是Eureka客戶的依賴,把dependencies節點下的依賴都刪除
添加Eureka Server的依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
再添加Spring Cloud版本屬性
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.SR1</spring-cloud.version> </properties>
在resources文件夾中添加application.yml文件,並設置為資源根目錄,配置文件內容和第一一樣,改下端口為:8882
新建啟動類(項目名+Application.java),寫一個main方法啟動Spring Boot程序,並加上Eureka Server的注解
配置Spring Boot啟動配置項
選擇對應的啟動類
啟動該模塊,成功后再瀏覽器輸入:http://localhost:8882/,使用Maven創建的Eureka Server項目也成功啟動了
4.創建Eureka Server集群
集群的作用是一個服務復制多份實例,當某一個實例掛掉后不至於影響整個系統,Eureka Server集群中的每個實例都是相互復制來保障所注冊的服務一致。
實際生產環境中只要有一個Eureka Server通過不同的實例對應配置不同的端口來實現,為方便演示,我這里創建集群就采用剛剛創建的兩個不同的Eureka Server來做。
在官方文檔中搜索:Peer Awareness
http://cloud.spring.io/spring-cloud-static/Finchley.SR1/single/spring-cloud.html#spring-cloud-eureka-server-peer-awareness
找到對應的集群配置
修改Host文件,添加 127.0.0.1 peer1 peer2,並將服務名設置一樣
服務1配置:
server:
port: 8881
eureka:
instance:
hostname: peer1
client:
registerWithEureka: true #把自身當做客戶端注冊到其他Eureka服務器
fetchRegistry: true #在本地緩存所有實例注冊信息
serviceUrl:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#設置與Eureka Server交互的地址,查詢服務和注冊服務都需要依賴這個地址。
##指向另一個注冊中心
defaultZone: http://peer2:8882/eureka/
spring:
#profiles: peer1 #沒做環境配置,注釋掉
application:
name: tmsapi-discovery-server
服務2配置:
server:
port: 8882
eureka:
instance:
hostname: peer2
client:
registerWithEureka: true #把自身當做客戶端注冊到其他Eureka服務器
fetchRegistry: true #在本地緩存所有實例注冊信息
serviceUrl:
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#設置與Eureka Server交互的地址,查詢服務和注冊服務都需要依賴這個地址。
##指向另一個注冊中心
defaultZone: http://peer1:8881/eureka/
spring:
#profiles: peer2 #沒做環境配置,注釋掉
application:
name: tmsapi-discovery-server
啟動兩個服務,成功瀏覽器輸入:http://peer1:8881/ 和http://peer2:8882/,同一個Application中就有兩個實例了
peer1:
peer2:
至此Eureka Server集群就搭建成功了。
Eureka相關資料: