微服務Eureka注冊中心

目錄

一、Eureka的結構和作用

二、搭建eureka-server

三、服務注冊

四、服務發現


假如我們的服務提供者user-service部署了多個實例,如圖:

存在的問題:

  • order-service在發起遠程調用的時候,該如何得知user-service實例的ip地址和端口?

  • 有多個user-service實例地址,order-service調用時該如何選擇?

  • order-service如何得知某個user-service實例是否依然健康,是不是已經宕機?

一、Eureka的結構和作用

?

?問題1:order-service如何得知user-service實例地址?

獲取地址信息的流程如下:

  • user-service服務實例啟動后,將自己的信息注冊到eureka-server(Eureka服務端)。這個叫服務注冊

  • eureka-server保存服務名稱到服務實例地址列表的映射關系

  • order-service根據服務名稱,拉取實例地址列表。這個叫服務發現或服務拉取

問題2:order-service如何從多個user-service實例中選擇具體的實例?

  • order-service從實例列表中利用負載均衡算法選中一個實例地址

  • 向該實例地址發起遠程調用

問題3:order-service如何得知某個user-service實例是否依然健康,是不是已經宕機?

  • user-service會每隔一段時間(默認30秒)向eureka-server發起請求,報告自己狀態,稱為心跳

  • 當超過一定時間沒有發送心跳時,eureka-server會認為微服務實例故障,將該實例從服務列表中剔除

  • order-service拉取服務時,就能將故障實例排除了

二、搭建eureka-server

?首先注冊中心服務端:eureka-server,這必須是一個獨立的微服務

引入SpringCloud為eureka提供的starter依賴:

<dependency>
? ? <groupId>org.springframework.cloud</groupId>
? ? <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>?

給eureka-server服務編寫一個啟動類,一定要添加一個@EnableEurekaServer注解,開啟eureka的注冊中心功能:

package cn.itcast.eureka;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}

?編寫一個application.yml文件,內容如下:

server:
? port: 10086
spring:
? application:
? ? name: eureka-server
eureka:
? client:
? ? service-url:?
? ? ? defaultZone: http://127.0.0.1:10086/eureka

啟動微服務,然后在瀏覽器訪問:http://127.0.0.1:10086

看到下面結果應該是成功了:

三、服務注冊

下面,我們將user-service注冊到eureka-server中去。

在user-service的pom文件中,引入下面的eureka-client依賴:

<dependency>
? ? <groupId>org.springframework.cloud</groupId>
? ? <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

?在user-service中,修改application.yml文件,添加服務名稱、eureka地址:

spring:
? application:
? ? name: userservice
eureka:
? client:
? ? service-url:
? ? ? defaultZone: http://127.0.0.1:10086/eureka

為了演示一個服務有多個實例的場景,我們添加一個SpringBoot的啟動配置,再啟動一個user-service。

首先,復制原來的user-service啟動配置:

?然后,在彈出的窗口中,填寫信息(不同版本界面不一樣)

?現在,SpringBoot窗口會出現兩個user-service啟動配置:

不過,第一個是8081端口,第二個是8082端口。

啟動兩個user-service實例:

?查看eureka-server管理頁面:

四、服務發現

下面,我們將order-service的邏輯修改:向eureka-server拉取user-service的信息,實現服務發現。

之前說過,服務發現、服務注冊統一都封裝在eureka-client依賴,因此這一步與服務注冊時一致。

在order-service的pom文件中,引入下面的eureka-client依賴:

<dependency>
? ? <groupId>org.springframework.cloud</groupId>
? ? <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

服務發現也需要知道eureka地址,因此第二步與服務注冊一致,都是配置eureka信息:

在order-service中,修改application.yml文件,添加服務名稱、eureka地址:

spring:
? application:
? ? name: orderservice
eureka:
? client:
? ? service-url:
? ? ? defaultZone: http://127.0.0.1:10086/eureka

最后,我們要去eureka-server中拉取user-service服務的實例列表,并且實現負載均衡。

不過這些動作不用我們去做,只需要添加一些注解即可。

在order-service的OrderApplication中,給RestTemplate這個Bean添加一個@LoadBalanced注解:

?

修改order-service服務中的cn.itcast.order.service包下的OrderService類中的queryOrderById方法。修改訪問的url路徑,用服務名代替ip、端口:

spring會自動幫助我們從eureka-server端,根據userservice這個服務名稱,獲取實例列表,而后完成負載均衡。 ?

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

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

相關文章

深度學習快速入門系列---損失函數

在深度學習中&#xff0c;損失函數的作用是量化預測值和真實值之間的差異&#xff0c;使得網絡模型可以朝著真實值的方向預測&#xff0c;損失函數通過衡量模型預測結果與真實標簽之間的差異&#xff0c;反映模型的性能。同時損失函數作為一個可優化的目標函數&#xff0c;通過…

10個微服務設計模式

微服務設計模式是一種指導微服務架構設計和開發的一系列原則和實踐。微服務設計模式的目的是為了解決微服務架構中遇到的一些常見的問題和挑戰&#xff0c;比如服務劃分、服務通信、服務治理、服務測試等。微服務設計模式可以幫助我們構建出高效、可靠、可擴展、可維護的微服務…

九耶丨閣瑞鈦倫特-井字棋html5代碼

你想了解關于井字棋&#xff08;Tic-Tac-Toe&#xff09;的HTML代碼嗎&#xff1f;以下是一個簡單的井子棋的HTML代碼示例&#xff1a; <!DOCTYPE html> <html> <head><title>Tic-Tac-Toe</title><style>.board {display: flex;flex-wrap…

使用AT命令操作Modem 3G/4G模塊

1. 引言 AT命令是一種通信協議&#xff0c;用于控制和配置各種設備&#xff0c;尤其在通信領域中具有重要性。它的名稱來源于"ATtention"&#xff08;注意&#xff09;&#xff0c;因為命令通常以"AT"開頭。AT命令最早被用于調制解調器&#xff0c;用于與…

redis學習筆記(三)

文章目錄 key操作&#xff08;1&#xff09;查找鍵&#xff08;2&#xff09;判斷鍵是否存在&#xff08;3&#xff09;查看鍵的的值的數據類型&#xff08;4&#xff09;刪除鍵以及鍵對應的值&#xff08;5&#xff09;查看鍵的有效期&#xff08;6&#xff09;設置key的有效期…

springboot整合rabbitmq

rabbitmq的七種模式 Hello word 客戶端引入依賴 <!--rabbitmq 依賴客戶端--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0</version></dependency> 生產者 imp…

STM32 LoRa源碼解讀

目錄結構&#xff1a; SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …

【解析postman工具的使用---基礎篇】

postman前端請求詳解 主界面1.常見類型的接口請求1.1 查詢參數的接口請求1.1.1 什么是查詢參數?1.1.2 postman如何請求 1.2 ?表單類型的接口請求1.2.1 復習下http請求1.2.2? 什么是表單 1.3 上傳文件的表單請求1.4? json類型的接口請求 2. 響應接口數據分析2.1 postman的響…

紅帽RHCA考試內容解析

紅帽RHCA考試內容解析&#xff1a;最新的RHCA有3大方向體系&#xff0c;考試內容分別為&#xff1a; 一、Platform 平臺技術 RH442&#xff1a;性能調優 使用紅帽企業Linux和紅帽網絡提供的工具來學習Linux的性能調優和規劃的技巧及方法&#xff0c;學習系統架構&#xff0c;…

什么是DNS欺騙及如何進行DNS欺騙

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、什么是 DNS 欺騙&#xff1f;二、開始1.配置2.Ettercap啟動3.操作 總結 前言 我已經離開了一段時間&#xff0c;我現在回來了&#xff0c;我終于在做一個教…

【AI】p54-p58導航網絡、藍圖和AI樹實現AI隨機移動和跟隨移動、靠近玩家揮拳、AI跟隨樣條線移動思路

p54-p58導航網絡、藍圖和AI樹實現AI隨機移動和跟隨移動、靠近玩家揮拳、AI跟隨樣條線移動思路 p54導航網格p55藍圖實現AI隨機移動和跟隨移動AI Move To&#xff08;AI進行移動&#xff09;Get Random Pointln Navigable Radius&#xff08;獲取可導航半徑內的隨機點&#xff09…

Java基礎十 - 設計模式

一、單例 1. 創建 餓漢式 package basic;public class ESingleton {// 先私有化靜態實例private static ESingleton eSingleton new ESingleton();// 私有化構造方法&#xff0c;防止外部實例化private ESingleton(){};// 提供全局訪問方法public static ESingleton geteSi…

時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)

時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價) 目錄 時序預測 | MATLAB實現基于LSTM長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)預測結果基本介紹程序設計參考資料 預測結果 基本介紹 Matlab實現LSTM長短期記憶神經…

識別和應對內存抖動

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、人工智能等&#xff0c;希望大家多多支持。 目錄 一、導讀二、概覽三、案例分析3.1 使用memory-profiler3.2 使用 cp…

磁粉制動器離合器收放卷應用介紹

張力控制系統的開環閉環應用介紹,請查看下面文章鏈接: PLC張力控制(開環閉環算法分析)_張力控制plc程序實例_RXXW_Dor的博客-CSDN博客里工業控制張力控制無處不在,也衍生出很多張力控制專用控制器,磁粉制動器等,本篇博客主要討論PLC的張力控制相關應用和算法,關于繞線…

什么是 fullgc

GC GC 全稱為garbage collection,中文含義為垃圾回收&#xff0c;在jvm中的含義為回收無用內存空間 Young space 中文名為年輕代或者新生代&#xff0c;為JVM 堆的一部分&#xff0c;由分代GC概念劃分而來&#xff0c;保存生命周期較短的對象 Tenured space 中文名為老年代…

APP外包開發的iOS開發語言

學習iOS開發需要掌握Swift編程語言和相關的開發工具、框架和技術。而學習iOS開發需要時間和耐心&#xff0c;尤其是對于初學者。通過堅持不懈的努力&#xff0c;您可以逐步掌握iOS開發技能&#xff0c;構建出功能豐富、優質的移動應用。今天和大家分享學習iOS開發的一些建議方法…

【數據結構系列】鏈表

&#x1f49d;&#x1f49d;&#x1f49d;歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續學…

解決hbase節點已下線,但在status中顯示為dead問題

工作中需要下線4臺hbase小節點&#xff0c;下線完成后使用status 命令查看,有一臺為dead狀態: 使用status detailed 查看&#xff0c;發現“hd-03"這臺節點是dead。 檢查各節點配置文件無誤&#xff0c;并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重啟兩個…

less基本使用

1 less中的變量 //對值進行聲明 link-color: #ccc//定義變量名稱 .{sleName} {}bg: background-color; //定義屬性名稱 .container {{bg}: red; }2 繼承&#xff08;復用重復樣式&#xff09; //繼承必須位于選擇器最后 //繼承選擇器名不能為變量 .a:hover:extend(.b) {}.a {…