赞
踩
Eureka 是 Netflix 的一个子模块,也是核心模块之一,它是一个基于 Rest 的服务,用于定位服务,服务注册和发现,以实现云端中间层服务发现和故障转移。
Eureka的服务注册和发现只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于 Zookeeper、Consul等服务,服务提供者【也可以是消费者】和服务消费者同时在Eureka-Server注册服务信息,当服务消费者需要远程调用服务提供者的服务时,可以直接通过在Eureka-Server注册是服务名完成服务调用,避免了url的依赖更新操作。
核心组件
- Eureka Server:提供服务注册服务,EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息
- Eureka Client:是一个 Java 客户端,同时也具备一个内置的、集成轮询 (round-robin) 负载算法的负载均衡器
Eureka Client服务构成:
- Service Provider 服务提供方将自身服务注册到 Eureka,从而使服务消费方能够找到
- Service Consumer 服务消费方从 Eureka 获取注册服务列表,从而能够消费服务
图示:
图示:
原理
- Eureka Client内置一个 使用轮询负载算法的负载均衡器。服务启动后,Eureka Client将会向Eureka Server发送心跳更新服务,如果Eureka Server在多个心跳周期内没有接收到某个服务的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
- Eureka Server是基于netflix设计出来的,其服务注册表中将会存储所有可用服务节点的信息,支持region和availabilityZone的概念,采用peer to peer的架构模式,也可以通过配置remoteRegionUrlsWithName来支持拉取远程的region实例,如果当前的region挂了,会自动fallback到远程的region获取数据,同时服务端采用renew租约和定时心跳的方式保护注册信息(self preservation机制)。
1.参考Spring Cloud集成Eureka构建微服务项目_玉言心的博客-CSDN博客_springboot集成微服务新建两个eureka-server服务,命名为:eureka-server-node01、eureka-server-node02
更新配置文件(application.yml)
eureka-server-node01
#自定义微服务名称 spring: application: name: eureka-server-node01 cloud: inetutils: ignored-interfaces: - VMware.* # 忽略虚拟机网卡 use-only-site-local-interfaces: true preferred-networks: 192.168.0.* # 优先使用 192.168.0.* server: port: 8001 cluster: port01: ${server.port} port02: 8002 management: endpoints: web: exposure: include: "*" # 暴露所有端点 eureka: hostname: eureka-server-node02 instance: prefer-ip-address: true #暴露eureka服务的地址 client: serviceUrl: defaultZone: http://${eureka.hostname}:${cluster.port02}/eureka/ #是否注册到eureka registerWithEureka: false #是否从eureka中拉取注册信息 fetchRegistry: false # 关闭自我保护 server: enable-self-preservation: true #清除无效节点,时间间隔为10秒 eviction-interval-timer-in-ms: 1000
eureka-server-node02
#自定义微服务名称 spring: application: name: eureka-server-node02 cloud: inetutils: ignored-interfaces: - VMware.* # 忽略虚拟机网卡 use-only-site-local-interfaces: true preferred-networks: 192.168.0.* # 优先使用 192.168.0.* server: port: 8002 cluster: port01: ${server.port} port02: 8001 management: endpoints: web: exposure: include: "*" # 暴露所有端点 eureka: hostname: eureka-server-node01 instance: prefer-ip-address: true #暴露eureka服务的地址 client: serviceUrl: defaultZone: http://${eureka.hostname}:${cluster.port02}/eureka/ #是否注册到eureka registerWithEureka: false #是否从eureka中拉取注册信息 fetchRegistry: false # 关闭自我保护 server: enable-self-preservation: true #清除无效节点,时间间隔为10秒 eviction-interval-timer-in-ms: 1000
更新hosts
127.0.0.1 eureka-server-node01
127.0.0.1 eureka-server-node02
更新eureka-client配置例如manager-server、consumer-service
manager-server
#自定义微服务名称 spring: application: name: manager-server #端口 server: port: 8090 management: endpoints: web: exposure: include: "*" # 暴露所有端点 #根据刚才定义的注册中心的对外暴露的地址填写。 eureka: client: serviceUrl: defaultZone: http://eureka-server-node01:8001/eureka/,http://eureka-server-node02:8002/eureka/ #每隔3秒拉取最新的注册列表(默认30秒) registry-fetch-interval-seconds: 3 #心跳间隔时间为3秒(默认30秒) instance: lease-renewal-interval-in-seconds: 3 #6秒没有接收到心跳则剔除微服务(默认90秒) lease-expiration-duration-in-seconds:
consumer-service
#自定义微服务名称 spring: application: name: consumer-service #端口 server: port: 8082 #根据刚才定义的注册中心的对外暴露的地址填写。 eureka: client: serviceUrl: defaultZone: http://eureka-server-node01:8001/eureka/,http://eureka-server-node02:8002/eureka/ fetch-registry: true #每隔3秒拉取最新的注册列表(默认30秒) registry-fetch-interval-seconds: 3 #心跳间隔时间为3秒(默认30秒) instance: lease-renewal-interval-in-seconds: 3 #6秒没有接收到心跳则剔除微服务(默认90秒) lease-expiration-duration-in-seconds: 6 ribbon: eureka: enabled: true
启动eureka-client服务轮询注册到,例如manager-server、consumer-service
访问eureka-server-node01
访问eureka-server-node02
停止eureka-server-node01访问eureka-server-node02【反过来一样】
由于本案例是基于本地搭建,使用的自定义域名eureka-server-node01、eureka-server-node02,因此不能开启使用主机名来定义注册中心的地址,否则会导致集群节点之间识别为unavailable-replicas
配置说明,其中一份为例
#自定义微服务名称 spring: application: name: eureka-server cloud: inetutils: # 忽略虚拟机网卡,防止使用了虚拟机网卡出现远程调用失败等问题 ignored-interfaces: # 支持名称,关键字正则 - VMware.* use-only-site-local-interfaces: true # 优先使用 192.168.0.* preferred-networks: 192.168.0.* # 服务配置 server: port: 8001 # 集群部署使用配置,便于扩充管理 cluster: cluster1: hostname: eureka-server-node02 port: 8002 management: endpoints: web: exposure: include: "*" # 暴露所有端点 eureka: # 使用cluster配置,因此这里不使用hostname # hostname: eureka-server-node02 instance: # 使用主机名来定义注册中心的地址,同主机下的集群不能为true,否则集群其他服务为检测为不可用 preferIpAddress: false # 当前节点的服务实例名称 hostname: eureka-server-node01 #暴露eureka服务的地址 client: serviceUrl: defaultZone: http://${cluster.cluster1.hostname}:${cluster.cluster1.port}/eureka/ #是否注册到eureka registerWithEureka: true #是否从eureka中拉取注册信息,同步集群注册信息 fetchRegistry: true server: # 关闭自我保护 enable-self-preservation: true #清除无效节点,时间间隔为10秒 eviction-interval-timer-in-ms: 1000
eureka:
hostname: eureka-server-node02
instance:
# 使用主机名来定义注册中心的地址,同主机下的集群不能为true,否则集群其他服务为检测为不可用
preferIpAddress: false
# 当前节点的服务实例名称
hostname: eureka-server-node01
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。