1.Eureka基础知识2.单机Eureka搭建步骤3.集群Eureka搭建步骤4.Actuator微服务信息完善5.Eureka自我保护6.Eureka停止变更说明7.Eureka停止更新怎么办1、Eureka基础知识1.1)什么是eureka?单体架构时代:刚开始学习JAVA开发的时候,所有的功能都会放在一个spring项目中,每次项目迭代,发布的服务都会导致整个应用不可用,随着项目越大,启动越慢而且速度较慢,开发团队在开发周期中需要实现的功能越来越多。多年后,一个小而简单的应用程序可以成长为一个庞然大物。一旦一个应用越来越大,整个团队的开发、持续部署、技术升级、可靠性等都会降低。这时候,微服务架构出现了,就是为了解决上面的问题。微服务架构时代:通过拆分一个巨大的单体应用,按照功能模块拆分成小的服务,各自发布升级,出现问题只需要修复自己的那部分服务即可。可靠性、开发效率也将得到提升。1.2)什么是服务注册中心?当一个服务拆分为多个服务时,该服务将有两个角色:调用者和被调用者。调用者如何正确调用他想要的服务呢?需要服务注册中心来维护所有这些服务。EurekaServer作为服务注册中心,其他系统中的服务使用eurekaclients连接EurekaServer并保持心跳连接,以便维护人员通过EurekaServer监控系统中的各个服务是否正常运行。有了注册中心,当服务启动时,会把当前服务器的信息,比如服务名,通讯ip地址等,以别名的形式注册到注册中心,其他服务(consumer|producer)会在注册中心的表单中获取注册中心上的所有服务地址,然后调用它。所以注册中心是微服务调用的核心。1.3)Eureka的两个组件Eureka由两个组件组成:EurekaServer和EurekaClientEurekaServer提供注册服务每个微服务节点通过配置启动成功后,都会注册到EurekaServer中,这样EurekaServer中的服务注册中心就会被注册存储了所有可用的服务节点信息,在界面中可以直观的看到服务节点的信息。EurekaClient提供通过注册中心调用EurekaClient的方式,简化与Eurekaserver的交互。客户端还内置了负载均衡算法,例如通过一定的策略轮询访问服务提供者。应用启动后,会向EurekaServer发送心跳(默认30秒)。如果EurekaServer在多个心跳周期内没有收到节点的心跳,EurekaServer将从服务注册表中移除该服务(默认90秒)。2.单机Eureka搭建步骤我们先创建一个springWeb项目:修改pom文件4.0.0org.springframework.bootspring-boot-starter-parent2.6.6com.exampleeureka-80010.0.1-SNAPSHOTeureka-8001SpringBoot演示项目<properties>1.82021.0.1org.springframework。bootspring-boot-starter-weborg.springframework.cloudspring-cloud-starter-netflix-eureka-serverorg.springframework.bootspring-boot-starter-testtest<dependencies>org.springframework.cloudspring-cloud-dependencies${spring-cloud.version}pom导入org.springframework.bootspring-boot-maven-plugin关于springCloud和springBoot版本的选择,我们可以登录官网https://spring.io/projects/sp....因为我们的springBoot是2.6.x版本,那么对应的springCloud可以选择2021.0.x版本。您也可以访问https://start.spring.io/actua...以获得更详细的结果。ymlfile:server:port:8001eureka:instance:hostname:eureka1#eurekaserver实例名client:#true表示也是一个eurekaclient,会向registry注册自己(会使用集群模式)#false表示不是到注册中心注册自己register-with-eureka:false#true从其他eureka获取注册信息#false表示自己端是注册中心,不需要在注册中心查找服务fetch-registry:假启动类注解加上@EnableEurekaServer@SpringBootApplication@EnableEurekaServerpublicclassDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(DemoApplication.class,args);}}这时候再启动服务,eureka就启动起来了!当注册中心启动后,其他服务就会注册。整体流程如下:1)先启动服务注册中心2)启动服务提供者和消费者服务3)服务提供者和消费者服务将自己发送的信息以别名的形式注册到eureka4)当消费者服务需要调用该接口,使用服务别名去注册中心获取远程rpc调用地址5)消费者获取地址后,底层使用httpClint技术实现远程调用6)consumer或者服务地址缓存到本地jvm后,服务调用地址默认每30秒更新一次。3、我们仔细想想集群Eureka的搭建步骤。现在所有的服务都依赖于我们的注册中心,所有的服务都需要通过服务注册中心进行调度和管理。如果服务注册中心出现故障,整个微服务环境将不可用,所以注册中心也要保证高可用,必须是集群模式。让我们构建一个并尝试一下。其实搭建eureka集群很简单,先改yml文件:eureka-8001service:server:port:8001eureka:instance:hostname:eureka1#eureka服务器实例名client:#true表示你也是eurekaclient和willregisterwith中心注册自己(会用集群模式)#false表示不向注册中心注册自己register-with-eureka:true#true表示从其他eureka获取注册信息#false表示本端是注册中心,不用去注册中心检索服务fetch-registry:trueservice-url:#集群指向其他eureka,如果有多个注册中心,就写几个eurekadefaultZone:http://127.0.0.1:8001/尤里卡/,http://127.0.0.1:8002/eureka/spring:application:name:eureka-8001复制另一个项目,命名为eureka-8002,在pom文件、yml文件中更改名称:server:port:8002eureka:instance:hostname:eureka2#实例eurekaserverclient的名称:#true表示自己也是一个eurekaclient,会向注册中心注册自己(会使用集群模式)#false表示不向注册中心注册自己register-with-eureka:true#true向其他eureka学习获取注册中心信息#false表示你端是注册中心,不需要搜索注册中心servicefetch-registry:trueservice-url:#集群指向其他eurekadefaultZone:http://127.0.0.1:8001/eureka/,http://127.0.0.1:8002/eureka/spring:application:name:eureka-8002然后启动这两个服务,可以看到服务注册中心已经启动,互相注册。4.Actuator微服务信息完整。虽然我们的集群已经启动成功,但是服务状态显示的是localHost,也就是服务器的名字。我们在生产中部署它。通过服务器的名称,很难看出服务部署在哪台服务器上。我们通常以ip+port的形式展示,也更容易维护ymlofeureka1:server:port:8001eureka:instance:hostname:eureka1#Eureka服务器实例名prefer-ip-address:true#访问路径可以显示IP地址instance-id:${spring.cloud.client.ip-address}:${server.port}-eureka1#访问路径的名称格式client:#true表示自己也是eurekaclient,会向注册中心注册自己(会使用集群模式)#false表示自己不会自己注册到注册中心register-with-eureka:true#true从其他eureka获取注册信息#false表示自己端是注册中心,不需要在注册中心fetch中搜索服务-registry:trueservice-url:#集群指向其他eurekasdefaultZone:http://127.0.0.1:8001/eureka/,http://127.0.0.1:8002/eureka/spring:application:name:eureka-8001ymlofeureka2:server:port:8002eureka:instance:hostname:eureka2#eureka服务端的实例名prefer-ip-address:true#访问路径可以显示IP地址instance-id:${spring.cloud.client.ip-address}:${server.port}-eureka2#访问路径名称格式client:register-with-eureka:true#false表示不向注册中心注册。fetch-registry:true#false表示我端是注册中心,我的职责是维护服务实例,不需要取回服务service-url:#集群指向其他eurekadefaultZone:http://127.0.0.1:8001/eureka/,http://127.0.0.1:8002/eureka/spring:application:name:eureka-8002这样显示就友好多了。5、Eureka自我保护首先我们来看看什么是eureka自我保护:默认情况下,如果Eureka在一定时间内没有收到微服务实例的心跳,Eureka会注销该实例(默认90秒),当网络发生震荡(延迟、卡顿、拥塞等)时,服务与eureka无法正常通信。虽然微服务本身是健康的,但是服务会被eureka从注册中心移除,虽然此时服务不应该被注册。Eureka使用“自我保护机制”来解决这个问题。当eureka节点在短时间内丢失一个节点(可能是网络震荡),那么这个节点就会进入自我保护模式。在自我保护模式下,Eureka将保护服务注册表中的所有信息,不再注销任何服务实例。它的设计理念是更愿意保留错误的服务注册信息,而不是盲目注销任何可能健康的服务实例。综上所述,自我保护模式是一种应对网络异常的安全保护措施。它的架构理念是保留所有微服务而不是盲目注销任何健康的微服务(健康的和不健康的都会被保留),可以让eureka维护的服务更加稳定,本质上是一种AP思想。如果在EurekaServer的首页看到如下提示,说明Eureka已经进入保护模式,也就是说默认开启eureka自我保护:server:port:8001eureka:instance:hostname:eureka1#eurekaserverinstancenameprefer-ip-address:true#访问路径可以显示IP地址instance-id:${spring.cloud.client.ip-address}:${server.port}-eureka1#名称格式访问路径client:#true表示我同时也是一个eurekaclient,将自己注册到注册中心(会使用集群模式)#false表示不注册自己到注册中心register-with-eureka:true#true从其他eureka获取注册信息#false表示我自己端是注册中心,不需要搜索注册服务fetch-registry:trueservice-url:#集群指向其他eurekadefaultZone:http://127.0.0.1:8001/eureka/,http://127.0.0.1:8002/eureka/server:enable-self-preservation:false#关闭自我保护eviction-interval-timer-in-ms:5000#timeoutperiod为5秒spring:application:name:eureka-8001此时关闭自我保护。6、Eureka的停止说明上面说了这么多关于eureka的东西,但是eureka2.x版本的组件已经停止更新了。7、Eureka停止更新怎么办Eureka停止更新了,其实不用恐慌,还会有替代产品,比如zk、consul、nacos等,我们会在后续的博客中进行说明。