二十、面向對象底層邏輯-ServiceRegistry接口設計集成注冊中心

一、服務治理的基石接口

在微服務架構中,服務實例的動態注冊與發現是保證系統彈性的關鍵機制。Spring Cloud Commons模塊通過ServiceRegistryRegistration接口定義了服務注冊的標準化模型,為不同服務發現組件(Eureka、Consul、Nacos等)提供統一的抽象層。這兩個接口共同構建了Spring生態中服務治理的基礎設施。


二、ServiceRegistry接口:注冊中心的操作控制器

1. 接口定義與核心職責

public interface ServiceRegistry<R extends Registration> {// 注冊服務實例void register(R registration);// 注銷服務實例void deregister(R registration);// 關閉注冊中心void close();// 設置實例狀態(如UP/DOWN)void setStatus(R registration, String status);// 獲取實例狀態Object getStatus(R registration);
}

核心能力

  • 服務實例的生命周期管理(注冊/注銷)

  • 健康狀態維護

  • 與底層注冊中心(如Consul、Zookeeper)的交互抽象

2. 典型實現

  • EurekaEurekaServiceRegistry

  • ConsulConsulServiceRegistry

  • NacosNacosServiceRegistry


三、Registration接口:服務實例的元數據載體

1. 接口定義與核心數據

public interface Registration extends ServiceInstance {// 繼承ServiceInstance的基礎屬性String getServiceId();String getHost();int getPort();boolean isSecure();URI getUri();Map<String, String> getMetadata();
}

元數據包含

  • 服務ID(對應spring.application.name)

  • 網絡地址(IP/端口)

  • 健康檢查路徑

  • 標簽等自定義元數據

2. 具體實現示例

public class CustomRegistration implements Registration {private String serviceId;private String ip;private int port;private Map<String, String> metadata;// 實現接口方法...
}

四、協作流程與生命周期

1. 服務注冊流程

2. 生命周期管理

  • 啟動時:通過@PostConstruct觸發注冊

  • 運行時:定時發送心跳維持狀態

  • 關閉時:通過ShutdownHook調用deregister()


五、生產級應用場景

1. 多網卡環境選擇IP

public class CustomRegistration extends EurekaRegistration {@Overridepublic String getHost() {// 選擇指定網卡IPreturn NetworkUtils.getPreferredIp();}
}

2. 自定義元數據注入

# application.yml
spring:cloud:consul:discovery:metadata:zone: ${ZONE_ID}version: 1.2.0

3. 優雅下線實現

@PreDestroy
public void gracefulShutdown() {registry.setStatus(registration, "OUT_OF_SERVICE");registry.deregister(registration);
}

六、擴展與高級配置

1. 自定義狀態管理

public class CustomServiceRegistry implements ServiceRegistry<Registration> {public void setStatus(Registration reg, String status) {// 將狀態同步到自定義監控系統monitoringClient.reportStatus(reg.getServiceId(), status);}
}

2. 注冊過濾器鏈

public class AuditServiceRegistry implements ServiceRegistry<Registration> {private final ServiceRegistry<Registration> delegate;public void register(Registration reg) {auditLog.log("Registering: " + reg.getServiceId());delegate.register(reg);}
}

?七、接口設計底層邏輯


1. 服務域對象

ServiceRegistry屬于服務域對象,以單實例服務于所有調用,加載后不可變并緩存在BeanFactory中。

2. 元數據對象

Registration屬于元數據對象,封裝服務本身的描述信息,如ip地址、端口號等,以原型模式加載,每元數據每實例。

3. 單一職責

ServiceRegistry負責包裝給定的元數據,僅面向registration元數據封裝注冊中心這一個變化因子,職責清晰、功能單一。

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

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

相關文章

DeepSeek:以開源之力,引領AI技術新風潮

在年春節&#xff0c;大語言模型DeepSeek如同一枚震撼彈&#xff0c;在全球范圍內引發了轟動&#xff0c;成功“破圈”&#xff0c;將中國的人工智能&#xff08;AI&#xff09;技術成果推向了世界舞臺。 開源策略&#xff1a;打破技術壁壘 在AI行業&#xff0c;OpenAI等巨頭…

完整改進RIME算法,基于修正多項式微分學習算子Rime-ice增長優化器,完整MATLAB代碼獲取

1 簡介 為了有效地利用霧狀冰生長的物理現象&#xff0c;最近開發了一種優化算法——霧狀優化算法&#xff08;RIME&#xff09;。它模擬硬霧狀和軟霧狀過程&#xff0c;構建硬霧狀穿刺和軟霧狀搜索機制。在本研究中&#xff0c;引入了一種增強版本&#xff0c;稱為修改的RIME…

PyTorch可視化工具——使用Visdom進行深度學習可視化

文章目錄 前置環境Visdom安裝并啟動VisdomVisdom圖形APIVisdom靜態更新API詳解通用參數說明使用示例Visdom動態更新API詳解1. 使用updateappend參數2. ~~使用vis.updateTrace方法~~3. 完整訓練監控示例 Visdom可視化操作散點圖plot.scatter()散點圖案例線性圖vis.line()vis.lin…

Java使用Collections集合工具類

1、Collections 集合工具類 Java 中的 Collections 是一個非常有用的工具類&#xff0c;它提供了許多靜態方法來操作或返回集合。這個類位于 java.util 包中&#xff0c;主要包含對集合進行操作的方法&#xff0c;比如排序、搜索、線程安全化等。 Java集合工具類的使用&#x…

Unity基礎學習(五)Mono中的重要內容(1)延時函數

目錄 一、Mono中的延時函數Invoke 1. Invoke作用&#xff1a;延遲指定時間后執行一次函數。API&#xff1a; 2. InvokeRepeating作用&#xff1a;延遲后開始重復執行函數。API&#xff1a; 3. CancelInvoke作用&#xff1a;停止所有延時函數&#xff0c;或停止指定函數的延時…

180KHz 60V 5A開關電流升壓/升降壓型DC-DC轉換器XL4019升降壓芯片

介紹 XL6019是一款專為升壓、升降壓設計的 單片集成電路&#xff08;升壓和降壓是由外圍電路拓撲確定的&#xff09;&#xff0c;可工作在DC5V到40V輸入電 壓范圍&#xff0c;低紋波&#xff0c;內置功率MOS。XL6019內 置固定頻率振蕩器與頻率補償電路&#xff0c;簡化了電 路…

如何暢通需求收集渠道,獲取用戶反饋?

要暢通需求收集渠道、有效獲取用戶反饋&#xff0c;核心在于多樣化反饋入口、閉環反饋機制、用戶分層管理、反饋數據結構化分析等四個方面。其中&#xff0c;多樣化反饋入口至關重要&#xff0c;不同用戶有不同的溝通偏好&#xff0c;只有覆蓋多個反饋路徑&#xff0c;才能捕捉…

Python結合ollama和stramlit開發聊天機器人

Python結合ollama和stramlit開發聊天機器人 一、環境準備1、streamlit安裝2、langchain安裝3、ollama的安裝 二、Ollama平臺聊天機器人實現1、需求2、模型調用3、前端實現頁面呈現代碼實現 三、詳細代碼地址四、參考資源 一、環境準備 1、streamlit安裝 # 通過 pip 安裝 pip …

java jdbc執行Oracle sql文件

執行代碼 import java.io.FileInputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.sql.Connection; import java.sql.DriverManager;import org.apache.ibatis.jdbc.ScriptRunner;public class ExecSqlFileController {pu…

[Java實戰]Spring Boot整合MinIO:分布式文件存儲與管理實戰(三十)

[Java實戰]Spring Boot整合MinIO&#xff1a;分布式文件存儲與管理實戰&#xff08;三十&#xff09; 一、MinIO簡介與核心原理 MinIO 是一款高性能、開源的分布式對象存儲系統&#xff0c;兼容 Amazon S3 API&#xff0c;適用于存儲圖片、視頻、日志等非結構化數據。其核心特…

開發指南115-CSS中選擇器關系

1、選擇后代 可以用選擇器1 選擇器2&#xff08;中間用空格分隔&#xff09;來表達&#xff0c;也可以在大括號里通過包含關系來表達 舉例 .a .b 舉例.a { .b{} } 注意css本身并不支持嵌套的寫法&#xff0c;是scss等提供的擴展能力。 2、選擇直系后代 選擇器1 > 選擇器2&a…

創建型:抽象工廠模式

目錄 1、核心思想 2、實現方式 2.1 模式結構 2.2 實現案例 3、優缺點分析 4、適用場景 1、核心思想 目的&#xff1a;統一管理相關對象的創建&#xff0c;確保產品兼容性。優先用于需要強約束產品兼容性的場景&#xff08;如UI主題、跨平臺適配&#xff09; 概念&#…

乘最多水的容器 | 算法 | 給定一個整數數組。有n條垂線。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

在我們日常生活中&#xff0c;蓄水似乎是一個極為樸素的物理行為&#xff1a;兩堵墻之間&#xff0c;注入水&#xff0c;看誰能裝得更多。可如果換個角度&#xff0c;從算法的視角去看這個問題&#xff0c;它會變得怎樣&#xff1f;你是否意識到&#xff0c;這樣一個簡單的問題…

無人機避障——深藍學院浙大Ego-Planner規劃部分

ESDF-free&#xff1a; 被這種類型的障礙物死死卡住的情況&#xff1a; 在一定范圍內建立ESDF&#xff1a; Ego-Planner框架&#xff1a; 找到{p,v} pair&#xff1a; 【注意】&#xff1a;首先根據在障礙物內航跡上的點Q&#xff0c;以及與它相鄰但不在障礙物內的兩個點&#…

零基礎設計模式——大綱匯總

零基礎學設計模式 - 大綱 前言 本教程旨在幫助零基礎的同學快速入門設計模式&#xff0c;理解其核心思想和應用場景。我們將通過清晰的講解和簡單的示例&#xff0c;逐步引導你掌握常用的設計模式。 第一部分&#xff1a;設計模式入門 什么是設計模式&#xff1f; 設計模式…

leetcode 92. Reverse Linked List II

題目描述 92. Reverse Linked List II 是第206題的進階版206. Reverse Linked List 思路很簡單&#xff0c;但一次性通過還是有點難度的。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(n…

CUDA的設備,流處理器(Streams),核,線程塊(threadblock),線程,網格(?gridDim),塊(block)和多gpu設備同步數據概念

CUDA的設備,流處理器&#xff0c;核&#xff0c;線程塊&#xff08;threadblock&#xff09;&#xff0c;線程&#xff0c;網格&#xff08;?gridDim&#xff09;&#xff0c;塊&#xff08;block&#xff09;和多gpu設備同步數據概念 CUDA的設備,流處理器&#xff0c;核&…

spring5-配外部文件-spEL-工廠bean-FactoryBean-注解配bean

spring配外部文件 我們先在Spring里配置一個數據源 1.導c3p0包,這里我們先學一下hibernate持久化框架&#xff0c;以后用mybites. <dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.2.…

Feature Toggle 不再亂:如何設計一個干凈、安全、可控的特性開關系統?

網羅開發 &#xff08;小紅書、快手、視頻號同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

技術分享:大數據挖掘平臺架構設計與行業應用實踐

在數字化轉型浪潮下&#xff0c;企業數據規模呈指數級增長。如何構建高效的數據挖掘體系&#xff0c;實現數據價值變現&#xff0c;成為技術團隊面臨的重要課題。本文將深入探討大數據挖掘平臺的核心架構、關鍵技術及行業應用實踐。 一、平臺架構設計 1. 數據采集層 支持多源異…