SpringCloud?Eureka服務(wù)注冊(cè)中心應(yīng)用入門(mén)詳解
1.多節(jié)點(diǎn)無(wú)縫切換問(wèn)題
- 分布式節(jié)點(diǎn)中的服務(wù)宕機(jī)或者重啟不影響客戶端使用
- 分布式節(jié)點(diǎn)中的服務(wù)宕機(jī)重啟不影響業(yè)務(wù)服務(wù)內(nèi)部通信
如果在某個(gè)分布式系統(tǒng)中想要解決上述問(wèn)題,那么這篇文章就是精華之處。
回顧一下以前的常用手段:
- 單節(jié)點(diǎn)運(yùn)行,其他節(jié)點(diǎn)備用,無(wú)法無(wú)縫連接,內(nèi)網(wǎng)通信無(wú)法保證
- 多節(jié)點(diǎn)運(yùn)行,nginx轉(zhuǎn)發(fā),這種時(shí)候需要加探測(cè),內(nèi)網(wǎng)通信需要先走到nginx
- 多節(jié)點(diǎn)運(yùn)行,再運(yùn)行g(shù)ateway做靜態(tài)轉(zhuǎn)發(fā),宕機(jī)節(jié)點(diǎn)無(wú)法過(guò)濾
那么服務(wù)注冊(cè)與發(fā)現(xiàn)就油然而生。
2.服務(wù)注冊(cè)與發(fā)現(xiàn) Eureka
Eureka是什么?
Eureka是springcloud的核心模塊之一,它是一個(gè)基于RestFul的服務(wù),用于實(shí)現(xiàn)中間層服務(wù)發(fā)現(xiàn)和故障轉(zhuǎn)移,Eureka對(duì)于微服務(wù)來(lái)說(shuō)是非常重要的。
有了Eureka后,在服務(wù)中通信只需要使用對(duì)應(yīng)的服務(wù)表示,不再需要再配置文件中配一堆地址了,功能類(lèi)似于dubbo的注冊(cè)中心zookeeper。
Eureka原理
Eureka采用C/S的架構(gòu)設(shè)計(jì),所有的客戶端都往服務(wù)端注冊(cè),在客戶端中都與Eureka服務(wù)端保持心跳連接,在內(nèi)網(wǎng)通信中可以直接使用服務(wù)名來(lái)調(diào)用其他服務(wù),例如zuul、gatewway、內(nèi)網(wǎng)RPC通信。
Eureka基于心跳的形式保持連接,在客戶端啟動(dòng)后,默認(rèn)每30s往服務(wù)端發(fā)送心跳,如果服務(wù)端在默認(rèn)90s(三個(gè)周期)后沒(méi)有接收客戶端的心跳,則會(huì)將這個(gè)客戶端移除。
3.Springboot集成Eureka
3.1 父包pom依賴
基于springboot2.6.8,spring-cloud-dependencies2021.0.3
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.8</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
3.2 eureka服務(wù)端
eureka服務(wù)端依賴
<!--注冊(cè)中心eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
yml配置
server:
port: 7510eureka:
instance:
hostname: localhost
#顯示真實(shí)IP 顯示DS replicas副本集
prefer-ip-address: true
client:
# false表示自己端就是注冊(cè)中心,不需要去檢索服務(wù)
fetch-registry: false
# false表示不向注冊(cè)中心注冊(cè)自己,因?yàn)樽约罕旧砭褪亲?cè)中心
register-with-eureka: false
#其他服務(wù)的注冊(cè)地址
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
server:
#關(guān)閉自我保護(hù)
enable-self-preservation: false
#啟用主動(dòng)失效,并且每次主動(dòng)檢測(cè)客戶端 間隔為3s 默認(rèn)60s
#解決失聯(lián)服務(wù)沒(méi)被移除的問(wèn)題
eviction-interval-timer-in-ms: 3000
Java代碼
啟動(dòng)類(lèi)添加注解
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
獲取當(dāng)前已注冊(cè)的服務(wù)信息
List<Application> applications = EurekaServerContextHolder.getInstance().getServerContext().getRegistry().getSortedApplications(); applications.forEach(application -> { application.getInstances().forEach(info -> { //c.e.e.controller.EurekaTestController : ORDER-SERVICE -- localhost:order-service:7530 log.info("{} -- {}", info.getAppName(), info.getInstanceId()); }); });
3.3 客戶端
pom依賴
<!--注冊(cè)中心eureka client--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
yml配置
server:
port: 7530eureka:
client:
service-url:
#服務(wù)端注冊(cè)地址
defaultZone: http://127.0.0.1:7510/eureka/
instance:
#控制臺(tái)status顯示真實(shí)ip 需要配合prefer-ip-address
# instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
#顯示真實(shí)IP
prefer-ip-address: true
#每3秒發(fā)送心跳,證明存活
lease-renewal-interval-in-seconds: 3
#告知服務(wù)端超過(guò)5秒未收到當(dāng)前服務(wù)心跳視為掛掉
lease-expiration-duration-in-seconds: 5spring:
application:
name: order-service
jackson:
default-property-inclusion: non_null
time-zone: Asia/Shanghai
cloud:
inetutils:
#指定取網(wǎng)段的網(wǎng)卡 未開(kāi)始真實(shí)ip時(shí)默認(rèn)就是localhost
preferred-networks: 192.168.0
preferred-networks和prefer-ip-address
均配置時(shí),如下圖所示
都不配置時(shí),如下圖所示,此時(shí)內(nèi)網(wǎng)ip是不通的
啟動(dòng)類(lèi)上加@EnableEurekaClient
注解
3.4 控制臺(tái)
訪問(wèn)http://127.0.0.1:7510/
,注意不是服務(wù)注冊(cè)地址
同一個(gè)服務(wù)不同端口,一個(gè)客戶端打開(kāi)了instance-id
配置,顯示的是真實(shí)IP。一個(gè)未打開(kāi)顯示的是localhost
PS:目前這個(gè)配置已在線上跑過(guò),未發(fā)現(xiàn)其他問(wèn)題!
到此這篇關(guān)于SpringCloud Eureka服務(wù)注冊(cè)中心應(yīng)用入門(mén)詳解的文章就介紹到這了,更多相關(guān)SpringCloud Eureka服務(wù)注冊(cè)中心內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud中的Eureka注冊(cè)中心詳細(xì)解讀
- springcloud本地服務(wù)不注冊(cè)到注冊(cè)中心的解決方案
- SpringCloud zookeeper作為注冊(cè)中心使用介紹
- SpringCloud注冊(cè)中心之consul詳細(xì)講解使用方法
- SpringBoot項(xiàng)目改為SpringCloud項(xiàng)目使用nacos作為注冊(cè)中心的方法
- Java之SpringCloud nocos注冊(cè)中心講解
- 淺析SpringCloud Alibaba-Nacos 作為注冊(cè)中心示例代碼
- Springcloud-nacos實(shí)現(xiàn)配置和注冊(cè)中心的方法
- springcloud實(shí)現(xiàn)注冊(cè)中心Eureka
- SpringCloud兩種注冊(cè)中心的實(shí)現(xiàn)
相關(guān)文章
詳解Spring Boot使用redis實(shí)現(xiàn)數(shù)據(jù)緩存
本篇文章主要介紹了詳解Spring Boot使用redis實(shí)現(xiàn)數(shù)據(jù)緩存,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Java?Mybatis的初始化之Mapper.xml映射文件的詳解
這篇文章主要介紹了Java?Mybatis的初始化之Mapper.xml映射文件的詳解,解析完全局配置文件后接下來(lái)就是解析Mapper文件了,它是通過(guò)XMLMapperBuilder來(lái)進(jìn)行解析的2022-08-08java Swing基礎(chǔ)教程之圖形化實(shí)例代碼
這篇文章主要介紹了java Swing基礎(chǔ)教程之圖形化實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02Java實(shí)現(xiàn)控制臺(tái)輸出兩點(diǎn)間距離
這篇文章主要介紹了Java實(shí)現(xiàn)控制臺(tái)輸出兩點(diǎn)間距離,涉及了部分編程坐標(biāo)的問(wèn)題,具有一定參考價(jià)值,需要的朋友可以了解下2017-09-09java實(shí)現(xiàn)簡(jiǎn)單聊天室單人版
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單聊天室的單人版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Java虛擬機(jī)之對(duì)象創(chuàng)建過(guò)程與類(lèi)加載機(jī)制及雙親委派模型
這篇文章主要給大家介紹了關(guān)于Java虛擬機(jī)之對(duì)象創(chuàng)建過(guò)程與類(lèi)加載機(jī)制及雙親委派模型的相關(guān)資料,本文通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-11-11