【spring cloud】(二)服務的注冊發現——Eureka

在這里插入圖片描述

??各位小伙伴們大家好,歡迎來到這個小扎扎的spring cloud專欄,在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛

💡spring cloud知識點速覽

  • 🌕 Eureka
    • 🌓 什么是服務治理?為什么需要服務治理?
    • 🌓 什么是服務注冊與發現?
    • 🌓 Eureka的兩大組件
  • 🌕 Eureka的使用
    • 🌓 Eureka服務端server的創建
    • 🌓 Eureka客戶端client的創建
  • 🌕 集群搭建
    • 🌓 Eureka服務端的集群搭建
    • 🌓 Eureka客戶端的集群搭建
    • 🌓 微服務模塊的相關配置
  • 🌕 服務發現
  • 🌕 自我保護機制
    • 🌓 什么是自我保護機制
    • 🌓 如何禁用自我保護機制

🌕 Eureka

🌓 什么是服務治理?為什么需要服務治理?

??服務治理是主要針對分布式服務框架的微服務,處理服務調用之間的關系、服務發布和發現、故障監控與處理,服務的參數配置、服務降級和熔斷、服務使用率監控等。

需要服務治理的原因:

  • 過多的服務 URL 配置困難
  • 負載均衡分配節點壓力過大的情況下,需要部署集群
  • 服務依賴混亂,啟動順序不清晰
  • 過多服務,導致性能指標分析難度較大,需要監控
  • 故障定位與排查難度較大

🌓 什么是服務注冊與發現?

??服務注冊主要針對服務提供者,服務啟動后需要將本身以別名的方式注冊到注冊中心上;而服務發現主要是針對消費者(服務使用者),它在調用服務的時候需要通過別名去注冊中心獲取到相應的服務,然后再實現本地RPC調用遠程RPC的功能。在這里插入圖片描述

🌓 Eureka的兩大組件

??Eureka Server: 提供注冊服務,各節點啟動時,會在EurekaServer中進行注冊,各服務的節點信息會儲存在EurekaServer中的服務注冊表中。
??Eureka Client: 其本質是一個Java客戶端,用于簡化Eureka Server的交互,客戶端同時也具備一個內置的使用負載算法的負載均衡器在啟動應用后將會向Eureka Server發送心跳(默認周期30s),如果EurekaServer在多個心跳周期內沒有接收到某節點的心跳,將會把該節點從服務注冊表上移除(默認周期90s)

🌕 Eureka的使用

🌓 Eureka服務端server的創建

??首先是創建一個子模塊作為eureka的服務器模塊,主要與其他的子模塊有以下三處不同:

一、導入eureka服務端的依賴

<!-- 服務注冊中心的服務端 eureka-server -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

二、配置文件配置eureka相關

# eureka的單機版配置
eureka:instance:hostname: localhost  #eureka服務端的實例名字client:register-with-eureka: false    #表示不向注冊中心注冊自己fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務service-url:#設置與eureka server交互的地址查詢服務和注冊服務都需要依賴這個地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

三、主程序類上使用注解開啟服務器

@SpringBootApplication
@EnableEurekaServer
public class EurekaMain7001 {public static void main(String[] args) {SpringApplication.run(EurekaMain7001.class, args);}
}

🌓 Eureka客戶端client的創建

??之前創建的支付子模塊8001就可以標記為Eureka的客戶端,我們需要做的和Eureka服務端的三步一樣:

一、導入eureka客戶端的依賴

<!--Eureka客戶端依賴-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

二、配置文件配置eureka相關

eureka:client:register-with-eureka: true #是否向注冊中心注冊自己fetchRegistry: true #是否從注冊中心抓取已有的注冊信息 默認trueservice-url:defaultZone: http://localhost:7001/eureka #服務端的地址

三、主程序類使用注解開啟客戶端

@SpringBootApplication
@EnableEurekaClient
public class Payment8001Application {public static void main(String[] args) {SpringApplication.run(Payment8001Application.class, args);}
}

??紅框顯示當前名稱為CLOUD-PAYMENT-SERVICE的服務狀態為UP,也就是說這個模塊已經被注冊進了eureka服務
在這里插入圖片描述
??目前為止,我們的eureka服務端上就只有一個支付模塊作為服務的提供者注冊進eureka服務器,并沒有服務的調用者,于是乎我們可以將80端口的消費者模塊通過以上三步,將其作為eureka客戶端注冊進eureka服務器,讓其實現服務的調用

🌕 集群搭建

🌓 Eureka服務端的集群搭建

??想必集群的好處這里就不需要再進行贅述了,單體的服務器一旦出現故障整個項目就搞崩了,如果是集群就不一樣了,一個故障其他頂上,服務之間可以實現互相注冊相互守望

??現在我們就創建一個新的服務端子模塊命名7002,作為集群中的另一個模塊使用。那么,如何實現互相注冊相互守望呢?答案就是:分別在配置文件中配置,使集群中的服務都能互相發現,其中最重要的就是defaultZone字段的對應值

server:port: 7001# eureka的單機版配置
eureka:instance:hostname: eureka7001.com  #eureka服務端的實例名字,這里以localhost代替client:register-with-eureka: false    #表示不向注冊中心注冊自己fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務service-url:# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己# 集群版,指向集群中的其他服務defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
server:port: 7002# eureka的單機版配置
eureka:instance:hostname: eureka7002.com   #eureka服務端的實例名字,這里以localhost代替client:register-with-eureka: false    #表示不向注冊中心注冊自己fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務service-url:# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己# 集群版,指向集群中的其他服務defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/
server:port: 7003# eureka的單機版配置
eureka:instance:hostname: localhost  # eureka服務端的實例名字,這里以localhost代替client:register-with-eureka: false    #表示不向注冊中心注冊自己fetch-registry: false   #表示自己就是注冊中心,職責是維護服務實例,并不需要去檢索服務service-url:# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/  # 單機版,指向的是自己# 集群版,指向集群中的其他服務defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

??集群搭建完畢之后,服務也要向集群中的所有模塊進行注冊,那么就需要使用配置文件了,這里以服務調用者80端口為例

server:port: 80spring:application:name: cloud-order-serviceeureka:client:register-with-eureka: true #是否向注冊中心注冊自己fetchRegistry: true #是否從注冊中心抓取已有的注冊信息 默認trueservice-url:
#      defaultZone: http://localhost:7001/eureka #服務端的地址#服務端的地址,服務端為集群版,向所有的模塊都注冊defaultZone: http://localhost:7001/eureka,http://localhost:7002/eureka,http://localhost:7003/eureka

🌓 Eureka客戶端的集群搭建

??從8001模塊copy一個為8002,作為客戶端集群的另一個模塊,同樣使用配置文件,將其也注冊進服務端集群。此時就可以使用服務調用者80進行調用了,但是80的controller是直接寫死的域名和端口,于是需要將域名端口改為微服務的名稱,然后在服務調用者80模塊開啟負載均衡讓請求合理的分配到服務集群的每一個模塊
將原先的指定域名+端口改為指定服務
在這里插入圖片描述
配置中開啟負載均衡
在這里插入圖片描述
這樣集群就部署好了,可以實現服務調用對8001和8002的輪詢

🌓 微服務模塊的相關配置

配置服務的名稱

eureka:instance:instance-id: payment8001

在這里插入圖片描述
訪問路徑顯示IP地址

eureka:instance:prefer-ip-address: true

🌕 服務發現

??所謂的服務發現就是對于已經注冊進eureka里的微服務,可以通過這個方式來獲得該服務的相關信息,實現服務發現功能分三步走:
一、對象注入

@Resource
private DiscoveryClient discoveryClient;

二、調用api獲取服務信息

@GetMapping(value = "/discovery")
public Object discovery() {List<String> services = discoveryClient.getServices();for (String service : services) {log.info("***********service: " + service);}List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");for (ServiceInstance instance : instances) {log.info(instance.getServiceId() + "\t"+ instance.getHost() + "\t"+ instance.getPort() + "\t"+ instance.getUri());}return this.discoveryClient;
}

三、主程序入口注解開啟發現功能

@EnableDiscoveryClient

這樣即可打印服務的相關信息
在這里插入圖片描述

🌕 自我保護機制

🌓 什么是自我保護機制

??EurekaServer會檢查最近15分鐘內所有EurekaClient正常心跳占比,如果低于85%就會觸發自我保護機制,此時Eureka暫時把這些失效的服務保護起來,不會立即將其剔除。Eureka在啟動完成后,每隔60秒會檢查一次服務健康狀態,如果這些暫時失效的服務過一段時間后(默認90秒)還是沒有恢復,就會把這些服務剔除。反之這個服務就不會因為網絡的延時、卡頓、擁擠等問題而被錯誤刪除。

??總而言之,自我保護機制就是說某一時刻微服務不可用時,Eureka不會立即將其剔除,而是在一段時間內等待其正常發送心跳。這屬于CAP原則的AP分支,主要保證了可用性和分區容錯性

🌓 如何禁用自我保護機制

??服務端使用配置文件關閉eureka的自我保護機制

eureka:server:# 關閉自我保護機制,保證不可用服務被及時踢除enable-self-preservation: false# eviction-interval-timer-in-ms: 2000

??客戶端使用配置文件設置心跳相關配置

eureka:instance:# Eureka客戶端向服務端發送心跳的時間間隔,單位為秒(默認是30秒)lease-renewal-interval-in-seconds: 1# Eureka服務端在收到最后一次心跳后等待時間上限,單位為秒(默認是90秒),超時將剔除服務lease-expiration-duration-in-seconds: 2

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534984.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python選擇題題庫百度文庫_大學Python程序題題庫

程序設計 題目&#xff1a;補充 fun 函數&#xff0c;其功能是判斷一個整數是否是素數&#xff0c;在主 函數 main 中輸入一個整數&#xff0c;調用該 fun 函數進行判斷并輸 出結果。 要求&#xff1a;使用 math 相關函數 import math def fun(n): i,w2,0 if n<1: w1 while …

新手攻略熔爐_我的世界攻略:生存模式新手攻略

《我的世界》(英文:《minecraft》)是一款風靡全球的高自由度沙盒游戲&#xff0c;由瑞典MojangAB和4J Studios開發。國際版由微軟Mojang工作室開發&#xff0c;中國版由網易代理。Minecraft著重于讓玩家去探索、交互&#xff0c;并且改變一個由一立方米大小的方塊動態生成的地圖…

【spring cloud】(三)服務調用——Ribbon、OpenFeign

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的spring cloud專欄&#xff0c;在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;服務…

c語言斐波那契數列_劍指Offer-10-I.斐波那契數列

題目題目描述寫一個函數&#xff0c;輸入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;數列的第 n 項。斐波那契數列的定義如下&#xff1a; F(0) 0, F(1) 1F(N) F(N - 1) F(N - 2), 其中 N > 1. 斐波那契數列由 0 和 1 開始&#xff0c;之后的斐波那契數…

mysql 導入 mssql_MySQL(csv,text)導入mssql使用方法

MySQL(csv,text)導入mssql是非常的簡單了但是在導入過程中會碰到text字段問題了&#xff0c;下面我們就來看一篇關于MySQL(csv,text)導入mssql使用方法吧&#xff0c;具體的操作細節如下所示。分兩步處理&#xff0c;第一步是將csv導入到mysql。沒有使用mssql自帶客戶端的導入功…

c# mvvm模式獲取當前窗口_AWTK-MVVM 介紹

MVVM(Model-View-ViewModel)介紹8.1 分離用戶界面和業務邏輯在開發應用程序時&#xff0c;要把用戶界面和業務邏輯分離開來&#xff0c;這是每個程序員都知道的常識。分離用戶界面和業務邏輯有幾個重要的好處&#xff1a;有利于隔離變化。用戶界面是最容易變化的&#xff0c;易…

【spring cloud】(三)服務降級——Hystrix

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的spring cloud專欄&#xff0c;在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;服務…

mysql高級查詢教程_MYSQL高級查詢

實際開發中&#xff0c;經常需要對某些數據進行統計&#xff0c;比如&#xff0c;統計某個字段的最大值、最小值、平均值等。MySQL中&#xff0c;提供了一些函數來實現這些功能聚合函數COUNT()——返回某列的行數SUM()——返回某列值的和AVG()——返回某列的平均值MAX()——返回…

【dubbo】(一) dubbo是什么?

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的dubbo專欄&#xff0c;在這個系列專欄中我對B站尚硅谷雷神的dubbo教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;dubbo知識點速覽&a…

axios安裝_Vue腳手架安裝,與基本語法(干貨)

首先&#xff0c;這篇Vue文章是為了下一篇我整合springbootvue前后分離的小demo&#xff0c;這兩天整理好會上傳哈哈1. Node.js安裝1.1 下載安裝在node.js 官網下載&#xff0c; 根據自己電腦系統安裝&#xff0c;一直點下一步即可1.2 測試安裝是否成功WindowsR打開cmd窗口&…

mysql port range_MySQL 數據庫常見調優方法及參數設置_MySQL

1. 關閉 SELinuxvim /etc/selinux/config 更改 SELINUXenforcing 為 SELINUXdisabled2. 更改 IO Schedule, 對于 SSD 硬盤無需更改echo deadline > /sys/block/sda/queue/scheduler3. 更改 ulimitvim /etc/security/limits.conf* soft nofile 65535* hard nofile 65535roo…

base64 能放數組里面么_數組:總結篇

我們做個總結吧數組理論基礎數組是非常基礎的數據結構&#xff0c;在面試中&#xff0c;考察數組的題目一般在思維上都不難&#xff0c;主要是考察對代碼的掌控能力也就是說&#xff0c;想法很簡單&#xff0c;但實現起來 可能就不是那么回事了。首先要知道數組在內存中的存儲方…

xampp mysql 卸載_卸載Xampp并安裝apache + mysql + php 過程

首先是卸載xampp&#xff0c;打開xampp-control.exe 控制面板&#xff0c;停止apache和mysql服務。如果你是安裝版xampp&#xff0c;可以到如果不是則安裝如下方法。停止服務之后。就需要卸載服務。打開cmd&#xff0c;用sc.exe這個Windows命令開始——運行——cmd.exe&#xf…

python判斷正確錯誤_python錯誤和異常

Python3 錯誤和異常 作為 Python 初學者&#xff0c;在剛學習 Python 編程時&#xff0c;經常會看到一些報錯信息&#xff0c;在前面我們沒有提及&#xff0c;這章節我們會專門介紹。 Python 有兩種錯誤很容易辨認&#xff1a;語法錯誤和異常。 Python assert&#xff08;斷言&…

nodejs mysql 返回json_python向mysql中存儲JSON及Nodejs取出

雖然把JSON數據存入mysql也是比較蛋疼&#xff0c;但是相比使用Nodejs嵌套處理多個mysql查詢并拼接返回數據也算是沒mongo時的一個折中方案了。我使用python拼接了一個json格式的字符串&#xff0c;卻遇到了一些問題1&#xff0c;如果把json數據轉成str存入&#xff0c;那么nod…

17個常用經典數據可視化圖表與冷門圖表

數據可視化是創建信息圖形表示的過程。隨著可視化技術的飛速發展&#xff0c;可以利用強大的可視化工具選擇合適的數據可視化圖表來展示數據。以下專業人士都應該知道的一些最重要的數據可視化圖表。 常見數據可視化圖表 餅圖 餅圖是最常見和最基本的數據可視化圖表之一。餅圖…

python keyerror_盤點Python 初學者最容易犯的10大錯誤!你中招了嗎?

對于新手&#xff0c;初學Python時&#xff0c;總會遇到這樣那樣的報錯&#xff0c;想要弄懂Python錯誤信息的含義可能還不知道怎么做&#xff0c;這里列出了一些比較常見的Python報錯問題&#xff0c;希望對于學習Python的人能夠有些幫助。發現有很多想要學習Python卻不知道如…

mysql index sub part_mysql中的key和index 理解

mysql的key和index多少有點令人迷惑&#xff0c;這實際上考察對數據庫體系結構的了解的。1 key 是數據庫的物理結構&#xff0c;它包含兩層意義&#xff0c;一是約束(偏重于約束和規范數據庫的結構完整性)&#xff0c;二是索引(輔助查詢用的)。包括primary key, unique key, fo…

【spring cloud】(六)消息總線——springcloud Bus

各位小伙伴們大家好&#xff0c;歡迎來到這個小扎扎的spring cloud專欄&#xff0c;在這個系列專欄中我對B站尚硅谷陽哥的spring cloud教程進行一個總結&#xff0c;鑒于 看到就是學到、學到就是賺到 精神&#xff0c;這波依然是血賺 ┗|&#xff40;O′|┛ &#x1f4a1;Bus…

python快速排序代碼_Python實現快速排序算法

原標題&#xff1a;Python實現快速排序算法 Python實現快速排序算法 快速排序算法是一種基于交換的高效的排序算法&#xff0c;由C.R.A.Hoare于1962年提出&#xff0c;是一種劃分交換排序。它采用了一種分治的策略&#xff0c;通常稱其為分治法(Divide and conquer algorithm)。…