二十、面向对象底层逻辑-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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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. 数据采集层 支持多源异…