Eurake原理简介,及集群环境搭建

Eurake原理简介,及集群环境搭建Java 提供了对象序列化机制 允许把任何对象写入输出流中或从输入流中读取

大家好,欢迎来到IT知识分享网。

什么是Eurake

      简单来说就是一个服务注册与发现的中间组件,解决的问题很明显,通过用实例名称来替换IP,防止服务所在节点的IP变化之后,其它服务无法调用的问题。

      在Eureka的基本架构中主要有以下三种角色

  • Register Service :服务注册中心,它是一个Eureka Server ,提供服务注册和发现的功能。
  • Provider Service :服务提供者,它是一个Eureka Client ,提供服务,同时它也可以是一个服务消费者
  • Consumer Service :服务消费者,它是一个Eureka Cient ,消费服务,同时它也可以是一个服务提供者。

      使用Eurake后,服务间的调用方式发生了一些细微的变化,服务在启动时会向Eureka Server注册自我信息(主要是服务名、IP),当想访问其它服务时,需要先通过服务名从Eurake Server获取对应服务的IP,然后通过IP重新请求。

Eureka相关特性说明

  1. 集群:作为服务注册中心,Eureka Server通常以集群模式部署,集群之间相互注册,以异步的方式互相复制各自的状态,所以也就存在某时间点,节点间数据临时不一致的情况。
  2. 客户端缓存:为了避免每次请求都出现两次网络I/O,Eureka Client客户端通常会缓存一份Eurake Server上的服务列表。Client端在注册自身信息的同时,会启动一个定时任务,该任务每隔30秒从Eureka Server上拉取一次服务列表,更新本地缓存。此外为了保证IP变化能被及时发现,Eureka Client会与Eurake Server保持一定的心跳频率,上报自己最新的信息。
  3. 服务剔除:默认情况下,Eureka Client每隔30秒会向Eureka Server发起一次心跳。如果Eureka Client连续90秒没有向Eureka Server发送心跳,Eureka Server会认为该服务不可用,从而将该服务实例从服务注册列表删除。
  4. 自我保护机制:如果Eureka Server发现某个服务的连接时断时续,它会认为这可能是网络波动,而因为网络的原因剔除了服务是不合适的。为了应对这种情况,Eureka提供了自我保护机制,如果在短时间内丢失太多的节点,节点会进入自我保护模式。进入保护模式Server保护注册表中的信息,不会去删除服务。网络恢复之后会退出保护模式。使用eureka.server.enable-self-preservation= false 可以禁止自我保护模式。

基于Spring Cloud搭建Eureka集群
        集群原理说明:Eureka Server在启动时默认会注册自己成为一个服务,所以Eureka Server也是一个客户端。所以通过配置多个Eureka Server,让他们之间相互注册,就形成了一个集群。当服务提供者向其中一个Eureka注册服务时,这个服务就会被共享到其他Eureka上,这样所有的Eureka都会有相同的服务。
        Step01:由于每一个server即是服务端也是客户端,所以需要同时添加client和server依赖

 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>

       Step02:先看一下单节点下的配置。

spring: application: name: peer1 server: port: 7001 eureka: #仪表盘相关配置 environment: local-test datacenter: local-cloud dashboard: path: /dashboard #仪表盘访问地址 enabled: true #默认为true,启用仪表盘 #instance相关配置 instance: perfer-ip-address: true instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port} #client相关配置 client: serviceUrl: defaultZone: http://localhost:7001/eureka/ # 注册链接 register-with-eureka: false #是否向Eureka Server注册当前服务,默认为true会注册自己。 fetch-registry: false #是否检查其它Eureka Server节点 initial-instance-info-replication-interval-seconds: 40 #最初复制实例信息到eureka服务器延迟的时间,默认为40秒 instance-info-replication-interval-seconds: 30 #复制实例信息到eureka服务器的间隔时间,默认为30秒 registry-fetch-interval-seconds: 30 #从eureka服务器获取注册信息的间隔时间,默认为30秒 

    集群情况下,只需要修改上面配置的以下地方:

  • 将defaultZone地址指向其它Eureka Server注册中心
  • 将register-with-eureka设置为true(默认就是true,所以可以去掉)
  • 将fetch-registry设置为true  (同上)
  • 如果是单机伪集群模式,需要修改端口号
client: serviceUrl: defaultZone: http://localhost:7002/eureka/,http://localhost:7003/eureka/ # 注册链接 

  Step03:在启动类上添加@EnableEurekaServer注解,依次启动所有节点。结果如下

Eurake原理简介,及集群环境搭建

  • EurekaInstanceCanceledEvent:服务下线事件
  • EurekaInstanceRegisteredEvent:服务注册事件
  • EurekaInstanceRenewedEvent:服务续约事件
  • EurekaRegistryAvaiableEvent: 注册中心启动事件,该事件会在Eureka Server启动完以后马上发布。
  • EurekaServerStartedEventEureka:服务端启动事件,该事件会在Eureka Server启动完以后马上发布。
    Eurake原理简介,及集群环境搭建

  一个简单的监听如下:

@Component public class EurekaEventListener { private final static Logger logger = LoggerFactory.getLogger(EurekaEventListener.class); @EventListener public void listen(EurekaInstanceCanceledEvent event) { logger.warn("---服务{}下线", event.getAppName()); //... } @EventListener public void listen(EurekaInstanceRegisteredEvent event) { InstanceInfo instanceInfo = event.getInstanceInfo(); logger.info("----服务{}注册", instanceInfo.getAppName() + instanceInfo.getHostName() +" "+ instanceInfo.getIPAddr() +" "+ instanceInfo.getPort()); } @EventListener public void listen(EurekaInstanceRenewedEvent event) { logger.info("---服务{}续约", event.getServerId() +" "+ event.getAppName()); } @EventListener public void listen(EurekaRegistryAvailableEvent event) { logger.info("----注册中心启动,{}", System.currentTimeMillis()); } @EventListener public void listen(EurekaServerStartedEvent event) { logger.info("----注册中心服务端启动,{}", System.currentTimeMillis()); } }

   结果如下

Eurake原理简介,及集群环境搭建

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118368.html

(0)
上一篇 2025-11-13 17:45
下一篇 2025-11-13 18:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信