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