Eureka集羣介紹
在一個分佈式系統中,服務註冊中心是最重要的基礎部分,
理應隨時處於可以提供服務的狀態。爲了維持其可用性,使用集羣是很好的解決方案。
Eureka通過互相註冊的方式來實現高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現高可用部署。
開發環境
- JDK:1.8
- SpringBoot:2.1.16.RELEASE
- SpringCloud:Greenwich.RELEASE
項目結構
- halo-cloud-parent 父工程
- halo-cloud-server:9090(默認) 註冊中心
- halo-cloud-provider:7070 服務提供者
- halo-cloud-consumer:8080 服務消費者
修改hosts 文件
C:\Windows\System32\drivers\etc
127.0.0.1 cloud9091.com
127.0.0.1 cloud9092.com
127.0.0.1 cloud9093.com
halo-cloud-parent
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--web依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!--引入springcloud依賴的-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
halo-cloud-server
<parent>
<groupId>com.cloud</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!--eureka server 依賴座標-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
@EnableEurekaServer
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
採用不同的配置文件啓動三個不同的註冊中心服務
- application-peer1.yml
server: # 服務端口
port: 9090
spring:
application: # 應用名字,eureka 會根據它作爲服務id
name: cloud9090Server
# eureka配置
eureka:
instance:
hostname: cloud9090.com
client:
register-with-eureka: false # 不向eureka server 註冊自己
fetch-registry: false # 不向eureka server 獲取服務列表
service-url: # eureka server 的地址
# 單機情況 http://${eureka.instance.hostname}:${server.port}/eureka
# 集羣 http://cloud9091.com/eureka
defaultZone: http://cloud9091.com:9091/eureka/,http://cloud9092.com:9092/eureka/
- application-peer2.yml
server: # 服務端口
port: 9091
spring:
application: # 應用名字,eureka 會根據它作爲服務id
name: cloud9091Server
# eureka配置
eureka:
instance:
hostname: cloud9091.com
client:
register-with-eureka: false # 不向eureka server 註冊自己
fetch-registry: false # 服務發現 不向eureka server 獲取服務列表 表示自己端就是註冊中心 我的職責就是維護服務實例 false 自己不獲取註冊信息
service-url: # eureka server 的地址
# 單機情況 http://${eureka.instance.hostname}:${server.port}/eureka
# 集羣 http://cloud9090.com/eureka
defaultZone: http://cloud9090.com:9090/eureka/,http://cloud9092.com:9092/eureka/
- application-peer3.yml
server: # 服務端口
port: 9092
spring:
application: # 應用名字,eureka 會根據它作爲服務id
name: cloud9092Server
# eureka配置
eureka:
instance:
hostname: cloud9092.com
client:
register-with-eureka: false # 不向eureka server 註冊自己
fetch-registry: false # 服務發現 不向eureka server 獲取服務列表 表示自己端就是註冊中心 我的職責就是維護服務實例 false 自己不獲取註冊信息
service-url: # eureka server 的地址
# 單機情況 http://${eureka.instance.hostname}:${server.port}/eureka
# 集羣 http://cloud9090.com/eureka
defaultZone: http://cloud9090.com:9090/eureka/,http://cloud9091.com:9091/eureka/
分別啓動三個註冊中心服務
剩下兩個跟這個配置一樣
測試
-
localhost:9090
-
localhost:9091
-
localhost:9092