SpringCloud注冊中心部署Eureka流程詳解
今天我們開始正式編碼,如何創(chuàng)建spring boot項目這篇文章就不再講述,如果想要了解可以閱讀我之前的創(chuàng)建springboot項目。
首先我們先進行Spring cloud五大組件之一的注冊中心,之前文章已經(jīng)講過注冊中心的介紹,今天我們來部署Netflix的Eureka,進行單機部署以及高可用部署,并開發(fā)生產(chǎn)者以及消費者來進行測試eureka的注冊消費。(ps:系列文章使用的Spring cloud版本為2021.0.4,對應的spring boot版本2.6.11)
1、Eureka服務
我們在主工程目錄下面新創(chuàng)建一個Module,名字eureka-server,引入下面的依賴
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>這個子工程只是作為eureka的注冊中心,無需引入其他jar包。
創(chuàng)建配置文件application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: eureka-server
registerWithEureka:是否將自己注入到注冊中心,因為本身就是Eureka服務,默認為true,所以這里設置為false;
fetchRegistry:是否從注冊中心獲取注冊列表,后續(xù)進行集群部署的時候需要獲取其他Eureka服務,這里是單點的所以設置為false;
因為eureka已經(jīng)停止維護,所以目前沒有找到相關的配置網(wǎng)頁,感興趣的同學可以自己點進去源碼進行查詢更多的配置以及配置的作用,因為eureka不是我們的重點所以這里就不一一進行解釋了。
創(chuàng)建服務啟動類EurekaServerApplication.class。
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}@EnableEurekaServer 此注解是Eureka服務server端注解,如果是服務客戶端client,需要注解為@EnableEurekaClient。
至此我們的一個Eureka服務就創(chuàng)建完成了,啟動之后我們就獲取了一個單節(jié)點的注冊中心。
2、服務提供者
依然是spring boot項目的三板斧,創(chuàng)建項目引入依賴、創(chuàng)建配置文件、創(chuàng)建啟動類。創(chuàng)建Module命名provider-eureka8001,引入依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>這里健康檢測相關的依賴之前引入錯誤,這里需要注意使用的是starter-actuator
創(chuàng)建配置文件application.yml,填寫下面內(nèi)容
server:
port: 8001
spring:
application:
name: provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring.application.name是項目的名稱,后面eureka服務注冊列表將會使用此值;
eureka.client.serviceUrl.defaultZone是Eureka注冊中心的注冊地址,如果Eureka服務部署在另外的地方,需要對應修改ip跟端口,這里本地部署直接localhost即可。
創(chuàng)建啟動類ProviderEureka8001Application.class
@SpringBootApplication
@EnableEurekaClient
public class ProviderEureka8001Application {
public static void main(String[] args) {
SpringApplication.run(ProviderEureka8001Application.class,args);
}
}這里作為服務客戶端使用@EnableEurekaClient
在provider項目創(chuàng)建接口類ProviderController.class,作為服務提供接口
@RestController
@RequestMapping("/provider")
public class ProviderController {
@Value("${server.port}")
private String port;
@GetMapping("/getPort")
public String getPort(){
return "訪問服務的端口為:" + port;
}
}3、服務消費者
創(chuàng)建服務消費者consumer-eureka8002,引入maven依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>創(chuàng)建配置文件application.yml
server:
port: 8002
spring:
application:
name: comsumer
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
創(chuàng)建啟動文件ConsumerEureka8002Application.class
@SpringBootApplication
@EnableEurekaClient
public class ConsumerEureka8002Application {
public static void main(String[] args) {
SpringApplication.run(ConsumerEureka8002Application.class,args);
}
}4、服務調(diào)用測試
啟動上面三個服務,訪問eureka管理頁面,默認為http://localhost:8761

可以看到,我們的兩個服務provider以及consumer已經(jīng)全部注冊成功,測試調(diào)用我們配置Ribbon作為調(diào)用負載均衡,來進行測試服務是否可以調(diào)用。
在consumer項目配置Ribbon的負載均衡注入RibbonConfig
@Configuration
public class RibbonConfig {
@Bean
@LoadBalanced
public RestTemplate loadBalancedRestTemplate(){
return new RestTemplate();
}
}在consumer項目創(chuàng)建消費的ConsumerController,這里調(diào)用的方式為http:// + 服務提供者注冊名稱(spring.application.name),這里是提供者的名字provider,加上服務的path。
@RestController
@RequestMapping("/consumer")
public class ConsumerController {
@Autowired
private RestTemplate loadBalancedRestTemplate;
@GetMapping("/getProviderPort")
public String getProviderPort(){
return loadBalancedRestTemplate.getForObject("http://provider/provider/getPort",String.class);
}
}重啟我們的消費者項目,在網(wǎng)頁里面輸入請求地址http://localhost:8002/consumer/getProviderPort,可以看到訪問成功且返回的是provider的端口號

到此我們使用eureka作為服務注冊中心并嘗試編寫服務生產(chǎn)消費的學習就結(jié)束了,后續(xù)Eureka集群部署方式也比較簡單,就是另外創(chuàng)建一個EurekaServer服務,配置文件、啟動類、依賴引入都與之前的Eureka服務一樣,這里需要修改兩個Eureka服務的配置文件,將各自的服務都注入到對方的列表中去。
server:
port: 8761
eureka:
instance:
hostname: eureka-server1
client:
registerWithEureka: false #我是服務端,不需要將自己注冊
fetchRegistry: false #我是服務端,不需要進行服務發(fā)現(xiàn),無需獲取服務注冊列表
serviceUrl:
defaultZone: http://eureka-server2的ip:8762/eureka #將另外一個eurekaserver2的服務進行注冊
server:
port: 8762
eureka:
instance:
hostname: eureka-server2
client:
registerWithEureka: false #我是服務端,不需要將自己注冊
fetchRegistry: false #我是服務端,不需要進行服務發(fā)現(xiàn),無需獲取服務注冊列表
serviceUrl:
defaultZone: http://eureka-server1的ip:8762/eureka #將另外一個eurekaserver1的服務進行注冊
Eureka默認會開啟自我保護機制,自我保護機制是Eureka為了防止網(wǎng)絡波動引起的服務心跳丟失問題,堅持“寧可信其有”的原則,在默認90s內(nèi)沒有接收到客戶端的心跳依然不將其移除,取消保護機制可在Eureka Server進行下面配置:
eureka.server.enable-self-preservation=false #關閉自我保護
eureka.server.eviction-interval-timer-in-ms=3000 #超時3s自動清除
保持開啟,進行自我設置保護機制可在Eureka Server使用下面配置:
eureka.instance.lease-expiration-duration-in-seconds=10 #用來修改eureka server默認接受心跳的最大時間 默認是90s
eureka.instance.lease-renewal-interval-in-seconds=5 #指定客戶端多久向eureka server發(fā)送一次心跳 默認是30s
到此這篇關于SpringCloud注冊中心部署Eureka流程詳解的文章就介紹到這了,更多相關SpringCloud Eureka內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring?Boot?4.0對于Java開發(fā)的影響和前景
探索Spring?Boot?4.0如何徹底革新Java開發(fā),提升效率并開拓未來可能性!別錯過這篇緊湊的指南,它帶你領略Spring?Boot的強大魅力和潛力,準備好了嗎?2024-02-02
Java之jdbc連接mysql數(shù)據(jù)庫的方法步驟詳解
這篇文章主要介紹了Java之jdbc連接mysql數(shù)據(jù)庫的方法步驟詳解,JCBC技術是java開發(fā)必備的只是,jdbc連接mysql數(shù)據(jù)庫,這是一個比較簡單的方法,有興趣的可以了解一下2020-07-07
Java中如何將?int[]?數(shù)組轉(zhuǎn)換為?ArrayList(list)
這篇文章主要介紹了Java中將?int[]?數(shù)組?轉(zhuǎn)換為?List(ArrayList),本文通過示例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12
SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心的方法
本文主要介紹了SpringBoot項目改為SpringCloud項目使用nacos作為注冊中心,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-04-04

