SpringCloud-Eureka
原文: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相关推荐
- SpringCloud Eureka自我保护机制
转载自 SpringCloud Eureka自我保护机制 自我保护背景 首先对Eureka注册中心需要了解的是Eureka各个节点都是平等的,没有ZK中角色的概念, 即使N-1个节点挂掉也不会影响其他 ...
- springcloud Eureka服务注册和发现
一,Eureka基本介绍: Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...
- SpringCloud Eureka初体验
文章目录 Eureka Server 创建Eureka Server项目 配置application.properties 增加@EnableEurekaServer注解 访问Eureka Serve ...
- SpringCloud eureka服务状态监听
一.前言 近期由于公司不同平台项目之间的业务整合,需要做到相互访问! 每个平台均有自己的注册中心和服务,且注册中心相互之间并没有相互注册! 借助spring的事件监听,在eureka-server端监 ...
- spring-cloud eureka注册发现
idea新建一个eureka server服务 application.yml 配置: spring:application:name: eureka-serverserver:port: 7000e ...
- 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign
SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...
- SpringCloud——Eureka服务注册和发现
一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...
- SpringCloud/Eureka/Ribbon:No instances available for springcloud-provider-dept
服务注册方: <!--eureka server--> <dependency><groupId>org.springframework.cloud</gro ...
- SpringCloud:Eureka Config项目搭建(Gradle项目)
Eureka Config分为Config Server 和Config Client两部分. Config Server部分: gradle配置: // https://mvnrepository. ...
- 【实践篇】SpringCloud + Eureka + Mybatis plus 整合分布式事务Seata
纵观全文 项目简介 配置Seata Server服务 修改conf下的registry.conf文件 修改conf下的file.conf文件 启动seata server服务 在系统服务中配置使用Se ...
最新文章
- Windows 10 install Pycharm 开发环境
- 如何使用SQL Server INSTEAD-OF触发器
- 随想录(程序员和收入)
- Scala开发教程(16): 没有“break”和“continue”的日子
- linux三剑客应用到工作中,LINUX 三剑客老大(AWK) 日常工作总结(示例代码)
- php 正则匹配 文件,php – 正则表达式匹配.htaccess中的一系列文件类型
- centos mysql5.7主从同步配置_centos 7 配置 mysql 5.7 主从复制
- 25.go doc 与 godoc
- 三态门三个状态vhdl_人防门施工方案
- 微型计算机技术试题,《微型计算机技术》试题库
- cmd 编译class 文件
- Qt编写数据可视化大屏界面电子看板10-改造QCustomPlot
- 搜狗输入法如何输入直角引号(「『』」 )
- 毕业设计 : 基于深度学习的口罩佩戴检测【全网最详细】 - opencv 卷积神经网络 机器视觉 深度学习
- 大学可以这样读——我的心路历程和一点思考
- 2020 AAAI-GMAN: A Graph Multi‐Attention Network for Traffic Prediction阅读笔记(翻译)
- EPLAN使用技巧总结
- 计算机网络课程设计报告 组建校园局域网,计算机网络课程设计报告-组建校园局域网.pdf...
- 《Advice on how to read papers》---吴恩达CS230随堂笔记
- [core]-ARM-A系列Core的分类快速参考
热门文章
- java file gettext_避免使用.properties文件GNU Gettext Java
- 非计算机专业的学生,简谈非计算机专业的计算机教育
- laravel+php+支付功能,laravel+微信支付源码
- python中gui实现一个登录界面_Python:简单的登陆GUI界面
- java void eat_java匿名内部类
- python3 idle自动补全_给Python IDLE加上自动补全和历史功能
- hp服务器raid制作,HP服务器建立RAID的两种方法
- 抖音计算机音乐你要我,抖音上很火的我要你快乐我要你快乐是什么歌?
- 计算机应用基础随堂,《计算机应用基础》随堂题库
- Spring @scope注解