Spring Cloud 源码分析之 Eureka 篇第二章:注册中心启动类上的注解 EnableEurekaServer

SpringCloud系列——Eureka注解式启动剖析 server端/client端概览 本文主要是围绕这张图来讲解! server端添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> client端添加依赖 <dependen 阅读详情

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

  • 本章是《Spring Cloud 源码分析》系列文章的第二篇,我们从注册中心 Eureka 开始这段历程;

Spring Cloud 源码下载

启动类上的注解

package com.bolingcavalry.springclouddeepeureka;
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication@EnableEurekaServerpublic class SpringclouddeepeurekaApplication {
    public static void main(String[] args) {        SpringApplication.run(SpringclouddeepeurekaApplication.class, args);    }}

复制代码

  • 上面这段代码与一般的 SpringBoot 启动类不同之处在于多了个注解 @EnableEurekaServer ,今天的源码分析都是围绕这个类开展的;

  • 看看此注解的源码:

/** * Annotation to activate Eureka Server related configuration {@link EurekaServerAutoConfiguration} * * @author Dave Syer * @author Biju Kunjummen * */
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import(EurekaServerMarkerConfiguration.class)public @interface EnableEurekaServer {
}

复制代码

  • 上述代码中,注解 @Import(EurekaServerMarkerConfiguration.class) 表示,EurekaServerMarkerConfiguration 这个类也会被作为 bean 做实例化;另外请注意注释中的内容: 注解 EnableEurekaServer 用来激活 Eureka Server 相关的配置:EurekaServerAutoConfiguration ,记下这是 EurekaServerAutoConfiguration 第一次出现在我们面前;

  • 接下来去看被实例化了的 EurekaServerMarkerConfiguration 的源码:

/** * Responsible for adding in a marker bean to activate * {@link EurekaServerAutoConfiguration} * * @author Biju Kunjummen */@Configurationpublic class EurekaServerMarkerConfiguration {
  @Bean  public Marker eurekaServerMarkerBean() {    return new Marker();  }
  class Marker {  }}

复制代码

  • 如上所示,简单到只有个一内部类 EurekaServerMarkerConfiguration.Marker,我的猜测是: 有的 bean 会通过注解 ConditionalOnBean 作为自己是否实例化的条件,而条件对应的 bean 就是 EurekaServerMarkerConfiguration.Marker ;

  • 请注意注释中的内容: 注解 EurekaServerMarkerConfiguration 用来响应激活 EurekaServerAutoConfiguration ,这是 EurekaServerAutoConfiguration 第二次出现在我们面前;

  • 根据前面两次注释的提示,EurekaServerAutoConfiguration 类是必须要看了,打开这个类,先看注解:

@Configuration@Import(EurekaServerInitializerConfiguration.class)@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class)@EnableConfigurationProperties({ EurekaDashboardProperties.class,    InstanceRegistryProperties.class })@PropertySource("classpath:/eureka/server.properties")

复制代码

  • 符合之前的猜测,通过 @ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) 注解,保证了 EurekaServerAutoConfiguration 类会被实例化后注册到 spring 容器中,也就是说这里面的配置都生效了;

  • 接下来就是 spring 容器对 bean 进行实例化和初始化了,重点需要关注的是 EurekaServerInitializerConfiguration、EurekaServerContext、EurekaServerBootstrap 这三个类;

  • EurekaServerAutoConfiguration 中的 @Bean 注解会实例化 EurekaServerContext、EurekaServerBootstrap,这两个实例已经不是 SpringCloud 工程的内容了,它们都来自 com.netflix.eureka ,它们接手了真正的 EurekaServer 的启动逻辑:

@Beanpublic EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs,    PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) {  return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs,      registry, peerEurekaNodes, this.applicationInfoManager);}
@Beanpublic EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry,    EurekaServerContext serverContext) {  return new EurekaServerBootstrap(this.applicationInfoManager,      this.eurekaClientConfig, this.eurekaServerConfig, registry,      serverContext);}

复制代码

  • EurekaServerInitializerConfiguration 这个类出现在 EurekaServerAutoConfiguration 的注解中,通过 @Import 注解被实例化,由于实现了 Lifecycle 接口,因此会被 spring 容器回调 start 方法:

@Overridepublic void start() {  new Thread(new Runnable() {    @Override    public void run() {      try {        //TODO: is this class even needed now?        eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);        log.info("Started Eureka Server");
        //发送广播,将EurekaServer的配置信息广播给全部订阅了该类型消息的监听        publish(new EurekaRegistryAvailableEvent(getEurekaServerConfig()));        EurekaServerInitializerConfiguration.this.running = true;        //发送广播,将EurekaServer的配置信息广播给全部订阅了该类型消息的监听        publish(new EurekaServerStartedEvent(getEurekaServerConfig()));      }      catch (Exception ex) {        // Help!        log.error("Could not initialize Eureka servlet context", ex);      }    }  }).start();}

复制代码

  • 如上所示,EurekaServerInitializerConfiguration 初始化的时候,除了主动调用 bootstrap 的初始化方法,还通过广播将 eureka 的配置信息发出去;

  • eureka 的配置信息 EurekaServerConfig 来自何处呢?EurekaServerAutoConfiguration 的内部类 EurekaServerConfigBeanConfiguration 负责生成这些配置信息,实例类型为 EurekaServerConfigBean:

@Configurationprotected static class EurekaServerConfigBeanConfiguration {  @Bean  @ConditionalOnMissingBean  public EurekaServerConfig eurekaServerConfig(EurekaClientConfig clientConfig) {    EurekaServerConfigBean server = new EurekaServerConfigBean();    if (clientConfig.shouldRegisterWithEureka()) {      // Set a sensible default if we are supposed to replicate      server.setRegistrySyncRetries(5);    }    return server;  }}

复制代码

  • 至此,我们对 EnableEurekaServer 注解有了更深入的了解,虽然创建注册中心所需代码很少,但是背后隐藏着复杂的初始化服务,感谢大师们杰出的设计,封装了复杂逻辑,让业务测可以轻量级完成这些操作;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

Spring Cloud - Eureka原理、注册、搭建、应用(全过程详解) 上一章我们讲到,利用 RestTemplate 发送 http 请求时,将 url 写成了 "http://localhost:8081/user/" + order.getUserId() ,这无疑将 url 写死了,?这只是其中一个背景,总的来讲,有以下三种原因:服务消费者该如何获取服务提供者的?如果有多个服务提供者,消费者该?消费者如何得知服务提供者的? 阅读详情

相关推荐

从理论到代码:如何用随机矩阵理论(RMT)优化你的微生物共现网络分析?

本文详细介绍了如何利用随机矩阵理论(RMT)优化微生物共现网络分析,解决传统阈值法的主观性和不稳定性问题。通过R语言实现端到端的分析流程,包括矩阵标准化、本征值谱分析和自动阈值确定,显著提升网络构建的准确性和可靠性。该方法特别适用于高通量测序数据,能自动识别噪声与真实信号的边界,为微生物组学研究提供更精确的互作网络分析工具。

weixin_29096377的博客 363

SpringCloud-服务注册与发现-Eureka

主要针对SpringCloud-服务注册与发现-Eureka的搭建

zhang__xixi的博客 743

SAP 配额修改 + 修改记录写入实现

采购配额修改并写入修改记录 cdhdr 和 cdpos

GAVIN 1099

SpringCloud之Eureka(SpringCloud二)

SpringCloud之Eureka

weixin_45734473的博客 284

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

算法 A 求稳健平均值和稳健标准差

文章目录算法原理代码 算法原理 算法 A 来自 GB/T 6379.5。应用此算法计算得到数据平均值和标准差的稳健值。稳健性是估计算法的特点,而不是其产生的估计值的特点,因此严格来说,称由此算法计算的平均值和标准差是稳健的是不确切的。然而,为避免使用繁琐的术语,“稳健均值”和“稳健标准差”应理解为利用稳健算法计算的总体均值和总体标准差的均值估计。 设数据为 xi,i∈(1,2,⋯ ,n)x_i, i\in(1,2,\cdots,n)xi​,i∈(1,2,⋯,n),记稳健平均值为 x∗,s∗x^*, s^*x

zhuo木鸟的博客 9254

Spring Cloud 源码分析之 Eureka 篇:注册中心启动类上的注解 EnableEurekaServer

表示,EurekaServerMarkerConfiguration这个类也会被作为bean做实例化;如上所示,简单到只有个一内部类EurekaServerMarkerConfiguration.Marker,我的猜测是有的bean会通过注解ConditionalOnBean作为自己是否实例化的条件,而条件对应的bean就是EurekaServerMarkerConfiguration.Marker;,今天的源码分析都是围绕这个类开展的;...

m0_57042151的博客 368

VMware ESXi 7.0下Intel网卡SR-IOV配置实战:解决虚拟化网络延迟问题

本文详细介绍了在VMware ESXi 7.0环境下为Intel网卡配置SR-IOV(单根I/O虚拟化)的完整实战流程。通过硬件辅助直通技术,虚拟机可直接访问物理网卡资源,有效绕过虚拟化层瓶颈,从而显著降低网络延迟和CPU开销,适用于金融交易、实时计算等对性能敏感的场景。

embedding5hiker的博客 553

Spring Cloud源码分析之Eureka篇第二章:注册中心启动类上的注解EnableEurekaServer

Spring Cloud源码分析之Eureka篇-EnableDiscoveryClient揭秘

程序员欣宸的博客 3816

深度学习:STGCN学习笔记

目录标题基于图神经网络的图分类问题GCN在行为识别领域的应用主要任务研究思路ST-GCN(SpatialTemporal Graph Convolutional Networks for Skeleton-Based Action Recognition)解读原论文解决问题主要贡献核心思想简介OpenPose 预处理基于人体关键点构造graph构造单帧graph(空间域)构造帧间graph(时间域)ST-GCN模型采样函数权重函数空域图卷积空间-时间模型分区策略可学习的边重要性权重TCNST-GCN模型的实

zhe470719的博客 3万+

【WRFDA教程第一期】运行观测预处理程序(OBSPROC)

运行观测预处理程序(OBSPROC)

WW、forever的博客 1893

SpringCloud微服务Eureka之二:@EnableEurekaServer源码分析

SpringCloud微服务Eureka之一:pom以及配置 Eureka最重要的注解之一:@EnableEurekaServer 没有这个@EnableEurekaServer就无法启动Eureka,这个注解是放在启动类上的。 @SpringBootApplication @EnableEurekaServer //启动注册中心,使得其他服务能注入其中 public class EurekaApplication { public static void main(String[] args)

NOT NULL 617

信贷系统学习总结(6)—— 贷前、贷中、贷后全流程核心模型解析

本文系统解析了金融风控模型的技术演进与应用实践。从贷前、贷中到贷后全流程,详细介绍了A卡、B卡、C卡三类核心评分模型,以及反欺诈、动态监控、催收优化等关键技术的实现路径。重点阐述了特征工程设计、模型验证指标、联邦学习等创新应用,并提供了多个实战案例数据。同时提出了算法选择的"黄金三角"原则和分阶段技术演进路线,强调数据治理、模型全生命周期管理和复合型团队建设的重要性。文章指出未来风控将向决策智能化、数据无感化和风险预知化方向发展,需要平衡技术创新与合规要求。

科技D人生 1220

Spring Cloud Eureka Server源码分析

总览 昨天文章分析介绍可Eureka Client的流程,今天接着昨天的将分析Eureka Server的一个流程。EurekaServer 是服务的注册中心,负责Eureka Client的相关信息注册,主要职责: 服务注册 接受心跳服务 服务剔除 服务下线 集群同步 @EnableEurekaServer 通过向Spring容器注入EurekaServerMarkerConfi...

shalistone的博客 276

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

spring-cloud-eureka (一) 原理分析

spring-cloud-eureka是spring-cloud-nettfix微服务套件中的一部分, 它基于nettfix-eureka做了二次封装,主要负责微服务架构中的服务治理功能。 如果了解dubbo的朋友应该知道,dubbo就是一个服务治理的框架,dubbo是基于zookeeper实现服务治理功能的。至于dubbo和nettfix-eureka的区别这里不多说,网上有不少这类文章。

Mr_rain的专栏 6721

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SpringCloud之Eureka服务注册与发现学习笔记(三)

内容介绍 介绍并实现Eureka的服务注册与发现,关键代码并不是特别多,主要是一些注解。由于在面试会问到里面的一些概念,优缺点,以及与其他框架的比较,所以需要记住下面的一些常用概念。 Eureka架构的使用模式 Eureka架构模式与Dubbo+Zookeeper的架构模式(点击这个链接)类似,都是往注册中心注册,消费者也是从注册中心去拿取。 不同之处: Dubbo+Zookeeper的远程调用是基于RPC,而Eureka的远程调用时基于REST接口的。Dubbo+Zookeeper需要下载一个客户端,而E

MarkZQP的博客 340

eureka-常用注解

@EnableDiscoveryClient @EnableEurekaClient 表示开启eureka客服端 上面两个注解都是用在应用的启动类上面,声明这是一个Eureka Client ,现在说明两个注解的区别。 springCloud 支持的注册中心有多种选择,Eureka, Consul ,Zookeeper 等,@EnableDiscoverCilent 为各种服务组件都提供了支持,该注解是spring-cloud-commons 注解。是一个高度的抽象。 @EnableEurekaClient

z781756640的博客 2037

SpringCloud Eureka Server源码解析(启动流程)

原创不易,转载请注明出处 文章目录前言1.spring cloud整合eureka server demo1.1 新建spring boot项目1.2 pom.xml文件添加1.3 配置文件1.4 启动类1.5 启动2.spring cloud自动装配eureka server源码解析2.1@EnableEurekaServer注解2.2 EurekaServerAutoConfiguration2.2.1 查找starter 自动装配类的技巧2.2.2 EurekaServerAutoConfigur.

猿上生活 1055

Eureka简单使用

新建一个maven模块或者工程,命名 eureka-server在pom.xml文件中引入该依赖新建一个EurekaApplication.java启动类文件,代码如下@EnableEurekaServer 自动装配 Eureka注册中心新建配置文件,application.ymleureka:client:这段配置是将自己注册到指定地址的注册中心中,用于eureka集群,单一的注册中心可以不做配置。启动该工程即可。访问该地址说明已经启动成功。

学习使我快乐_玉祥 1717

5、Eureka(搭建eureka服务(三步:引依赖,加注解,配置配置信息))

Eureka(搭建eureka服务(三步:引依赖,加注解,配置配置信息))eureka自己也是一个微服务,所以eureka在启动的时候把自己也注册到eureka上(为了后面eureka集群使用(比如有几个eureka,他们会相互做注册来信息交流)) 第一步:创建项目,准备eureka依赖 第二步:编写启动类,加上@EnableEurekaServer注解(就是一个开关) 第三步:添加application.yml配置文件,编写配置 这里是Eureka自己(很重要) 小结:(搭建三步走)

分享JAVA/ Python/ Ts学习路上的一些笔记,不足之处多多见谅。 853

idea创建时自动加入作者注释

idea使用的时候,每当创建一个新类,阿里巴巴的规范都会提示警告(【(类名)】缺少包含@author的注释信息 ),不想处理的话有条波浪线看着不舒服,手动处理的话又觉得麻烦,尤其是新建项目的时候,很多类都是要创建的,手动处理的话要处理太多次了,所以利用idea自带的功能解决这个问题。...

weixin_45066871的博客 3250

深度学习训练中Batch Size如何确定:从原理到工程实操的完整指南

在深度学习模型训练中,Batch Size作为核心超参数,直接影响梯度稳定性、收敛速度与模型泛化能力。理解其作用机制,需从梯度噪声与损失曲面的关系入手:小批次带来随机扰动,有助于跳出局部极小点;大批次梯度平滑,但易陷入泛化较差的尖锐极小值。同时,Batch Size与学习率遵循线性缩放法则,调整时需联动配合并引入warmup策略。实际工程中,确定Batch Size需先评估显存硬上限,再结合数据规模设定初始值,并通过小规模对比实验筛选候选值。针对显存受限场景,可借助混合精度训练或梯度累积技术,实现有效大批次

weixin_33834910的博客 424

【微服务注解】@EnableEurekaServer

当在启动类上添加了启动 Eureka 服务注册中心注解时,他的应用原理怎样的? 激活Eureka Server相关配置的注解 EurekaServerAutoConfiguration 可以将@EnableEurekaServer 这个注解看作是⼀个开关,开启时,会激活相关配置,会作为注册中⼼。同时,他⼜引⼊了 EurekaServerMarkerConfiguration类。 点进去EurekaServerMarkerConfiguration发现作者意图是:负责添加一个marker bean来激活E

真的好想再回到那时,可现在能做的只有补救。————个人博客:https://w7h1te.github.io/ 646

eureka源码系列 - 启动过程

eureka源码系列 - 启动过程 @Author:zxw @email:502513205@qq.com @school:吉首大学 此文为该鸭子上架,不建议观看,后续有时间在对文章总结优化 1.前言 最近更换了公司,所使用的技术也到了微服务这块,目前所采用的架构为springcloud微服务全家桶,所以也深入研究下springcloud相关组件的源码。今天讲的为eureka的启动过程 2.源码解析 刚开始看源码其实也挺懵逼的,不知道从何处看起,从网上搜的学习资料也零零散散,并不太适合自己去看。但是想

V_zxw的博客 773

@EnableEurekaServer注解

@EnableEurekaServer 1.1 在项目启动类上使用@EnableEurekaServer,可以将项目作为SpringCloud中的注册中心。那么这个注解做了哪些事呢? 1.2 点进去@EnableEurekaServer 这个注解,可以看到介绍时是这样的: Annotation to activate Eureka Server related configuration {@li...

过河的小卒子的博客 1万+
上一篇: 数据质量动态探查及相关前端实现
下一篇: Spring Boot + flowable 完美结合,快速实现工作流
程序员职业指南
博客等级 码龄4年 2136粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值