原文:https://xsxy007.github.io/2019/10/SpringCloud-Eureka/
Eureka 是Netflix开源的一款提供服务注册和发现的产品,提供了完整的Service Registery和Service Discovery实现,也是SpringCloud体系中最核心的组件之一

Eureka

由上边的图可以看出,Eureka由客户端和服务端组成,服务用用于服务的注册服务器,客户端用作服务的提供者和发现者

案例

git@github.com:xsxy007/springcloud-demo.git

Eureka Server

springboot 已经很好的支持了Eureka,只需要在pom中加入Eureka依赖,并在Application启动类中加上相关注解即可

1、pom依赖添加

本次使用的springboot版本为2.1.9;springcloud版本为Greenwich.RELEASE

以下列出了所有的依赖(ps:一开始因为springcloud和springboot的版本依赖问题,导致项目一直启动报错)

    <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Greenwich.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

2、在启动类上加注解@EnableEurekaServer注解


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

3、配置文件

在默认配置下,该注册中心会将自己作为客户端尝试注册自己,因此在单机的注册中心时,需要将此机制关闭掉

server:port: 8761 # 使用的是默认的端口
spring:application:name: eureka-server
eureka:client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://localhost:${server.port}/eureka/

eureka.client.register-with-eureka:表示是否将自己注册的eureka server,默认为true
eureka.client.fetch-registry:表示是否从eureka server上拉取注册信息,默认为true
eureka.client.service-url.defaultZone:表示注册中心的地址(默认为localhost:8761/eureka/)

4、启动项目

启动项目后访问localhost:8761 即可显示如下页面,此时 Instances current Registers里边并没有内容

集群配置

简单的集群,只要将各个注册中心相互配置即可
eureka.client.serviceUrl.defaultZone=http://域名:/${server.port}/eureka/,http://域名:/${server.port}/eureka/ 请其他注册中心的地址配置的defaultZone中

源码分析

从启动类注解开始 @EnableEurekaServer

  • 可以注意注释中的EurekaServerAutoConfiguration,该类就是EurekaServer的自动配置类

/*** 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),进入该类查看

// 可以看到,该类并没有什么实现,该类的作用:是为了控制 `EurekaServerAutoConfiguration` 类是否加载
@Configuration
public class EurekaServerMarkerConfiguration {@Beanpublic Marker eurekaServerMarkerBean() {return new Marker();}class Marker {}
}
  • 查看 EurekaServerAutoConfiguration(该类是在通过Springboot的@EnableAutoconfiguration 来加载spring.factories中的类的)

// 省略了部分代码
@Configuration
@Import(EurekaServerInitializerConfiguration.class)
@ConditionalOnBean(EurekaServerMarkerConfiguration.Marker.class) // 当存在 EurekaServerMarkerConfiguration 类是才初始化当前文件
@EnableConfigurationProperties({ EurekaDashboardProperties.class,InstanceRegistryProperties.class })
@PropertySource("classpath:/eureka/server.properties")
public class EurekaServerAutoConfiguration extends WebMvcConfigurerAdapter {// 实例化一个配置类,该配置类在 EurekaServerInitializerConfiguration 中会使用到@Configurationprotected static class EurekaServerConfigBeanConfiguration {@Bean@ConditionalOnMissingBeanpublic EurekaServerConfig eurekaServerConfig(EurekaClientConfig clientConfig) {EurekaServerConfigBean server = new EurekaServerConfigBean();if (clientConfig.shouldRegisterWithEureka()) {// Set a sensible default if we are supposed to replicateserver.setRegistrySyncRetries(5);}return server;}}// eurekaServer的上下文@Beanpublic EurekaServerContext eurekaServerContext(ServerCodecs serverCodecs,PeerAwareInstanceRegistry registry, PeerEurekaNodes peerEurekaNodes) {return new DefaultEurekaServerContext(this.eurekaServerConfig, serverCodecs,registry, peerEurekaNodes, this.applicationInfoManager);}// eurekaServer的启动@Beanpublic EurekaServerBootstrap eurekaServerBootstrap(PeerAwareInstanceRegistry registry,EurekaServerContext serverContext) {return new EurekaServerBootstrap(this.applicationInfoManager,this.eurekaClientConfig, this.eurekaServerConfig, registry,serverContext);}
}
  • 注意 EurekaServerInitializerConfiguration 类,该类实现了lifecycle接口,所以会被spring容器毁掉start方法

    @Overridepublic void start() {new Thread(new Runnable() {@Overridepublic void run() {try {//TODO: is this class even needed now?eurekaServerBootstrap.contextInitialized(EurekaServerInitializerConfiguration.this.servletContext);log.info("Started Eureka Server");publish(new EurekaRegistryAvailableEvent(getEurekaServerConfig()));EurekaServerInitializerConfiguration.this.running = true;publish(new EurekaServerStartedEvent(getEurekaServerConfig()));}catch (Exception ex) {// Help!log.error("Could not initialize Eureka servlet context", ex);}}}).start(); // 调用 start 方法启动线程}

参考: https://blog.csdn.net/cuixhao110/article/details/88353714

SpringCloud-Eureka相关推荐

  1. SpringCloud Eureka自我保护机制

    转载自 SpringCloud Eureka自我保护机制 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他 ...

  2. springcloud Eureka服务注册和发现

    一,Eureka基本介绍: Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...

  3. SpringCloud Eureka初体验

    文章目录 Eureka Server 创建Eureka Server项目 配置application.properties 增加@EnableEurekaServer注解 访问Eureka Serve ...

  4. SpringCloud eureka服务状态监听

    一.前言 近期由于公司不同平台项目之间的业务整合,需要做到相互访问! 每个平台均有自己的注册中心和服务,且注册中心相互之间并没有相互注册! 借助spring的事件监听,在eureka-server端监 ...

  5. spring-cloud eureka注册发现

    idea新建一个eureka server服务 application.yml 配置: spring:application:name: eureka-serverserver:port: 7000e ...

  6. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

    SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...

  7. SpringCloud——Eureka服务注册和发现

    一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...

  8. SpringCloud/Eureka/Ribbon:No instances available for springcloud-provider-dept

    服务注册方: <!--eureka server--> <dependency><groupId>org.springframework.cloud</gro ...

  9. SpringCloud:Eureka Config项目搭建(Gradle项目)

    Eureka Config分为Config Server 和Config Client两部分. Config Server部分: gradle配置: // https://mvnrepository. ...

  10. 【实践篇】SpringCloud + Eureka + Mybatis plus 整合分布式事务Seata

    纵观全文 项目简介 配置Seata Server服务 修改conf下的registry.conf文件 修改conf下的file.conf文件 启动seata server服务 在系统服务中配置使用Se ...

最新文章

  1. Windows 10 install Pycharm 开发环境
  2. 如何使用SQL Server INSTEAD-OF触发器
  3. 随想录(程序员和收入)
  4. Scala开发教程(16): 没有“break”和“continue”的日子
  5. linux三剑客应用到工作中,LINUX 三剑客老大(AWK) 日常工作总结(示例代码)
  6. php 正则匹配 文件,php – 正则表达式匹配.htaccess中的一系列文件类型
  7. centos mysql5.7主从同步配置_centos 7 配置 mysql 5.7 主从复制
  8. 25.go doc 与 godoc
  9. 三态门三个状态vhdl_人防门施工方案
  10. 微型计算机技术试题,《微型计算机技术》试题库
  11. cmd 编译class 文件
  12. Qt编写数据可视化大屏界面电子看板10-改造QCustomPlot
  13. 搜狗输入法如何输入直角引号(「『』」 )
  14. 毕业设计 : 基于深度学习的口罩佩戴检测【全网最详细】 - opencv 卷积神经网络 机器视觉 深度学习
  15. 大学可以这样读——我的心路历程和一点思考
  16. 2020 AAAI-GMAN: A Graph Multi‐Attention Network for Traffic Prediction阅读笔记(翻译)
  17. EPLAN使用技巧总结
  18. 计算机网络课程设计报告 组建校园局域网,计算机网络课程设计报告-组建校园局域网.pdf...
  19. 《Advice on how to read papers》---吴恩达CS230随堂笔记
  20. [core]-ARM-A系列Core的分类快速参考

热门文章

  1. java file gettext_避免使用.properties文件GNU Gettext Java
  2. 非计算机专业的学生,简谈非计算机专业的计算机教育
  3. laravel+php+支付功能,laravel+微信支付源码
  4. python中gui实现一个登录界面_Python:简单的登陆GUI界面
  5. java void eat_java匿名内部类
  6. python3 idle自动补全_给Python IDLE加上自动补全和历史功能
  7. hp服务器raid制作,HP服务器建立RAID的两种方法
  8. 抖音计算机音乐你要我,抖音上很火的我要你快乐我要你快乐是什么歌?
  9. 计算机应用基础随堂,《计算机应用基础》随堂题库
  10. Spring @scope注解