Spring Cloud-Eureka High-Availability Cluster
環境信息:
OS:Win10
JDK:Java8
SpringCloud:Greenwich.SR2
1 Eureka Server
1.1 核心依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.2 開啓註解
@SpringBootApplication
@EnableEurekaServer
public class CloudEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(CloudEurekaApplication.class, args);
}
}
1.3 主要配置
新建三個配置文件,對應三個Eureka節點:
application-node1.yml
application-node2.yml
application-node3.yml
三個配置文件配置內容一樣,不同的是:
- 端口:
server.port
分別修改爲三個不同的端口:18761
18762
18763
- 名字:
spring.application.name
分別修改爲三個不同的name:node1
node2
node3
- 名字:
eureka.instance.hostname
分別修改爲三個不同的域名:node1
node2
node3
- 註冊地址:
eureka.client.serviceUrl.defaultZone
每個節點的註冊地址要爲其他節點的地址,如node1要配置成node2和node3的地址,已達到相互註冊的目的;
eureka:
client:
serviceUrl:
defaultZone: http://node2:18762/eureka/,http://node3:18763/eureka/
node1節點服務端完整配置如下,其他節點按照上邊的規則進行修改:
server:
port: 18761
spring:
application:
name: cloud-eureka-node1
eureka:
instance:
hostname: node1
#不使用主機名來定義註冊中心的地址, 而使用IP地址的形式,
#如果設置了ipAddress 屬性, 則使用該屬性配置的IP, 否則自動獲取除環路IP外的第一個IP地址
preferIpAddress: true #自動將IP註冊到Eureka Server上, 如果不配置就是機器的主機名
#ipAddress: 192.168.1.128 # IP地址
#將Instance ID設置成IP:端口的形式
instance-id: ${spring.application.name}:${server.port}
#注意:更改Eureka更新頻率將打破服務器的自我保護功能, 生產環境下不建議自定義這些配置。
lease-expiration-duration-in-seconds: 30 #續約到期時間(默認90秒)
lease-renewal-interval-in-seconds: 10 #續約更新時間間隔(默認30秒)
#prefer-ip-address: true
client:
#向註冊中心註冊本服務實例
register-with-eureka: true
#檢索並維護註冊中心服務實例
fetch-registry: false
serviceUrl:
defaultZone: http://node2:18762/eureka/,http://node3:18763/eureka/
server:
enable-self-preservation: false
eviction-interval-timer-in-ms: 5000
waitTimeInMsWhenSyncEmpty: 0
1.4 Windows配置
修改host文件,在C:\Windows\System32\drivers\etc
下
#Eureka DS
127.0.0.1 node1
127.0.0.1 node2
127.0.0.1 node3
1.5 打包啓動
在項目下運行mvn package
,生成工程jar包;
然後開啓三個終端,分別啓動三個節點:
java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node1
java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node2
java -jar cloud-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=node3
前兩個節點會有報錯,是因爲有節點連接超時,都啓起來就好了;
1.6 Eureka服務端控制檯
分別打開:
http://node1:18761
http://node2:18762
http://node3:18763
可以看到他們相互進行了註冊,DS Replicas
能夠看到其他節點:
服務端代碼:https://github.com/WeisonWei/school-service-cloud/tree/master/cloud-eureka
2 Eureka Client
2.1 核心依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.2 開啓註解
@SpringBootApplication
@EnableEurekaClient
public class StudentServiceApplication {
public static void main(String[] args) {
SpringApplication.run(StudentServiceApplication.class, args);
}
}
2.3 主要配置
跟單節點不同的是註冊地址eureka.client.serviceUrl.defaultZone
,配置多個,其他沒有變化:
server:
port: 8080
spring:
application:
name: student-service
management:
endpoints:
web:
exposure:
include: '*'
endpoint:
health:
show-details: always
shutdown:
enabled: true
eureka:
client:
registry-fetch-interval-seconds: 5
healthcheck:
enabled: true
serviceUrl:
defaultZone: http://node1:18761/eureka,http://node2:18762/eureka,http://node3:18763/eureka
2.4 啓動服務
以不同端口啓動多個服務:
2.5 查看控制檯服務註冊情況
http://node1:18761
http://node2:18762
http://node3:18763
客戶端代碼:https://github.com/WeisonWei/school-service/tree/master/student-service
參考資料:
[ 1 ].Spring Cloud 微服務實戰 翟永超 電子工業出版社