Spring Cloud学习笔记——Eureka Server
Spring Cloud版本:Hoxton.SR3
Spring boot版本:2.2.5.RELEASE
demo Git仓库:开源在gitee中,私信索取地址
服务治理
在微服务架构中,服务治理是一个核心的内容。Spring Cloud中,有许多的组件帮助完成服务治理。服务治理,可能包含以下一内容,如:
服务注册与发现:服务的注册与发现,是微服务架构中的一个基本能力。消费者需要基于某种机制去获取到生产者提供的服务列表,并根据需要去调用。在Dubbo和Zookeeper的微服务架构中,Zookeeper就承担了服务注册中心的角色。健康监测:在服务运行的过程中,我们需要对服务的健康状态进行观测,一旦发现问题,需要及时处理。在单体应用中,相对方便处理,但是在微服务架构中,由于服务数量的增多,所以需要一个工具来帮助我们完成这项工作。安全控制:微服务架构下,全部或部分服务,可能基于业务的敏感性,需要对调用方的权限进行校验。负载控制:微服务架构下,我们需要关注每个服务的负载,并根据实际情况对负载进行调整,这种调整,可能是基于服务器的健康状态,或者是基于业务的重要程序,又或者是基于版本升级的需要。Eureka
Spring Cloud中,有很多内容,事实上是对Netflix OSS项目进行了整合。Netflix OSS是一组框架和库,它专注于解决一些分布式下的问题,如服务发现,负载平衡,容错等。Spring Cloud也发布了一些自己的组件,它们与Netflix OSS项目的某些框架或库具备相似的能力,这种现象的原因之一可能是Netflix OSS项目的开源计划推行缓慢。Eureka就是Spring Cloud整合于Netflix OSS项目的框架之一,它提个了服务注册与发现的能力。
Eureka也像我们之前聊过的Config一样,分成Server和Client两部分,Server提供服务注册与发现的能力,类似于Dubbo + Zookeeper框架下的Zookeeper,Server可以部署成集群。Client则跟随业务系统一起,可能向Server暴露自己的服务,也可以通过Server调用服务。
Server Demo
Demo开源在Gitee,需要请私信。
以spring-cloud-base-demo项目为基础,先添加Server依赖,如下:
Server依赖
在Application类上添加注解 @EnableEurekaServer。
在resources中添加配置文件application.yml,内容如下:
启动项目,通过浏览器访问,得到如下结果:
访问结果
可以看到,SpringEureka为我们提供了一个简单的控制台,通过这个控制台,可以了解到当前服务的一些相关信息。
Eureka的高可用性
Eureka支持集群,并且推荐集群。你可能已经发现,在控制台中,有一行红色的字,在控制台上,也不断地出现一些报错信息。这事实上是Eureka发现你的Server服务并不是以一个集群的形式运行而给出的提醒。要想让Eureka不再提醒,一种方式就是形成集群。我们尝试启动两个Server服务,并让它们彼此形成集群。
我们可以利用之前的spring-cloud-config-server项目来为Eureka提供外部配置服务。
先将spring-cloud-config-server运行起来。
在git的配置仓库中,新建两个文件,eureka1-dev.yml和eureka2-dev.yml。
eureka1-dev.yml内容如下:
eureka1-dev.yml
eureka2-dev.yml内容如下:
配置文件里,指明了当前应用运行的端口号,并通过eureka.client.serviceUrl.defaultZone的配置,把对方作为一个Server端,这样,两个Eureka Server就组合成了一个集群。
在Eureka Server项目中添加config-client的依赖,如下:
在resources中增加bootstrap.yml配置,内容如下:
在bootstrap.yml中,添加了config-client相关的配置,指明config-server的地址。
接下来,就可以运行项目了,运行时,我们通过添加运行时参数的方式,将一个应用名指定为eureka1,将另一个应用指定为eureka2。可以通过打包后,java-jar命令来执行,也可以通过idea提供的配置项目来执行。示例采用配置项目方式,如下:
idea提供的配置项目
分别运行eureka1和eureka2,会发现,控制台可能会先出现一些错误提示,但最终,错误提示会消息,分别打开eureka1或eureka2的浏览器控制台,发现红色的提示也已经消失了,并且,在控制台中,找到了对方的相关信息。这说明,eurekaserver集群已经成功部署并运行。
事实上,在本地开发中,我们可以通过一种更简单的方式来消除单点的错误提醒,就是向自身注册自己。application.yml中配置如下:
application.yml
注释掉bootstrap中关于config-server的配置,再次运行即可。这也是我们在本地开发时常用的一种方式。
Client Demo
事实上,在Server Demo中,已经包含了Client Demo。当两个Eureka服务形成集群时,事实上它们把彼此当作一个Client,向对方提交了注册。所以,Client Demo不再单独提供。在后续,会结合Spring Cloud的其它相关内容提供。需要注意的是,当只需要自身只是一个Eureka Client时,不需要依赖eureka-server,仅依赖eureka-client即可,否则,你可能还需要处理server单点的问题。
依赖eureka-client
Config和Eureka组合形成的集群
至此,我们聊到了SpringCloud中的Config和Eureka两个核心的组件,在生产中,以Config和Eureka为核心,可能的框架如下图:
Config和Eureka组合形成的集群
其中,eureka-server集群1专门为config-server服务,帮助config-server形成集群。eureka-server集群2基于config-server集群提供的配置形成服务,config-server集群和eureka-server集群2共同支持一系列既是eureka-client,又是config-client的业务集群。
举报/反馈