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,對應(yīng)的spring boot版本2.6.11)
1、Eureka服務(wù)
我們在主工程目錄下面新創(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服務(wù),默認為true,所以這里設(shè)置為false;
fetchRegistry:是否從注冊中心獲取注冊列表,后續(xù)進行集群部署的時候需要獲取其他Eureka服務(wù),這里是單點的所以設(shè)置為false;
因為eureka已經(jīng)停止維護,所以目前沒有找到相關(guān)的配置網(wǎng)頁,感興趣的同學(xué)可以自己點進去源碼進行查詢更多的配置以及配置的作用,因為eureka不是我們的重點所以這里就不一一進行解釋了。
創(chuàng)建服務(wù)啟動類EurekaServerApplication.class。
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
@EnableEurekaServer 此注解是Eureka服務(wù)server端注解,如果是服務(wù)客戶端client,需要注解為@EnableEurekaClient。
至此我們的一個Eureka服務(wù)就創(chuàng)建完成了,啟動之后我們就獲取了一個單節(jié)點的注冊中心。
2、服務(wù)提供者
依然是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>
這里健康檢測相關(guān)的依賴之前引入錯誤,這里需要注意使用的是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服務(wù)注冊列表將會使用此值;
eureka.client.serviceUrl.defaultZone是Eureka注冊中心的注冊地址,如果Eureka服務(wù)部署在另外的地方,需要對應(yīng)修改ip跟端口,這里本地部署直接localhost即可。
創(chuàng)建啟動類ProviderEureka8001Application.class
@SpringBootApplication @EnableEurekaClient public class ProviderEureka8001Application { public static void main(String[] args) { SpringApplication.run(ProviderEureka8001Application.class,args); } }
這里作為服務(wù)客戶端使用@EnableEurekaClient
在provider項目創(chuàng)建接口類ProviderController.class,作為服務(wù)提供接口
@RestController @RequestMapping("/provider") public class ProviderController { @Value("${server.port}") private String port; @GetMapping("/getPort") public String getPort(){ return "訪問服務(wù)的端口為:" + port; } }
3、服務(wù)消費者
創(chuàng)建服務(wù)消費者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、服務(wù)調(diào)用測試
啟動上面三個服務(wù),訪問eureka管理頁面,默認為http://localhost:8761
可以看到,我們的兩個服務(wù)provider以及consumer已經(jīng)全部注冊成功,測試調(diào)用我們配置Ribbon作為調(diào)用負載均衡,來進行測試服務(wù)是否可以調(diào)用。
在consumer項目配置Ribbon的負載均衡注入RibbonConfig
@Configuration public class RibbonConfig { @Bean @LoadBalanced public RestTemplate loadBalancedRestTemplate(){ return new RestTemplate(); } }
在consumer項目創(chuàng)建消費的ConsumerController,這里調(diào)用的方式為http:// + 服務(wù)提供者注冊名稱(spring.application.name),這里是提供者的名字provider,加上服務(wù)的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作為服務(wù)注冊中心并嘗試編寫服務(wù)生產(chǎn)消費的學(xué)習(xí)就結(jié)束了,后續(xù)Eureka集群部署方式也比較簡單,就是另外創(chuàng)建一個EurekaServer服務(wù),配置文件、啟動類、依賴引入都與之前的Eureka服務(wù)一樣,這里需要修改兩個Eureka服務(wù)的配置文件,將各自的服務(wù)都注入到對方的列表中去。
server:
port: 8761
eureka:
instance:
hostname: eureka-server1
client:
registerWithEureka: false #我是服務(wù)端,不需要將自己注冊
fetchRegistry: false #我是服務(wù)端,不需要進行服務(wù)發(fā)現(xiàn),無需獲取服務(wù)注冊列表
serviceUrl:
defaultZone: http://eureka-server2的ip:8762/eureka #將另外一個eurekaserver2的服務(wù)進行注冊
server:
port: 8762
eureka:
instance:
hostname: eureka-server2
client:
registerWithEureka: false #我是服務(wù)端,不需要將自己注冊
fetchRegistry: false #我是服務(wù)端,不需要進行服務(wù)發(fā)現(xiàn),無需獲取服務(wù)注冊列表
serviceUrl:
defaultZone: http://eureka-server1的ip:8762/eureka #將另外一個eurekaserver1的服務(wù)進行注冊
Eureka默認會開啟自我保護機制,自我保護機制是Eureka為了防止網(wǎng)絡(luò)波動引起的服務(wù)心跳丟失問題,堅持“寧可信其有”的原則,在默認90s內(nèi)沒有接收到客戶端的心跳依然不將其移除,取消保護機制可在Eureka Server進行下面配置:
eureka.server.enable-self-preservation=false #關(guān)閉自我保護
eureka.server.eviction-interval-timer-in-ms=3000 #超時3s自動清除
保持開啟,進行自我設(shè)置保護機制可在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
到此這篇關(guān)于SpringCloud注冊中心部署Eureka流程詳解的文章就介紹到這了,更多相關(guān)SpringCloud Eureka內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot多環(huán)境切換的靈活配置詳細教程
在真實項目開發(fā)的時候,一定會有多個環(huán)境,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多環(huán)境切換靈活配置的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-04-04springboot+idea+maven 多模塊項目搭建的詳細過程(連接數(shù)據(jù)庫進行測試)
這篇文章主要介紹了springboot+idea+maven 多模塊項目搭建的詳細過程(連接數(shù)據(jù)庫進行測試),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08使用FeignClient調(diào)用遠程服務(wù)時整合本地的實現(xiàn)方法
這篇文章主要介紹了使用FeignClient調(diào)用遠程服務(wù)時整合本地的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03SpringBoot 異步線程間數(shù)據(jù)傳遞的實現(xiàn)
本文主要介紹了SpringBoot 異步線程間數(shù)據(jù)傳遞的實現(xiàn),包括異步線程的基本概念、數(shù)據(jù)傳遞的方式、具體實現(xiàn)方式等,具有一定的參考價值,感興趣的可以了解一下2024-03-03解析ConcurrentHashMap: transfer方法源碼分析(難點)
ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧2021-06-06一文解決pom.xml報錯Dependency "xxx" not f
我們在使用maven進行jar包管理時有時會遇到pom.xml中報錯Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報錯Dependency "xxx" not found的解決方案,需要的朋友可以參考下2024-01-01