可以在程序中可以使用 DiscoveryClient 获取指定微服务的所有元数据信息:
@RestController@RequestMapping("/page")public class PageController {?@AutowiredRestTemplate restTemplate;?@AutowiredDiscoveryClient discoveryClient;?@GetMapping("/getProduct/{id}")public Products getProduct(@PathVariable Integer id) {// 1.获得 Eureka 中注册的 lagou-service-product 实例集合List<ServiceInstance> instances = discoveryClient.getInstances("lagou-service-product");// 2.获得实例集合中的第一个ServiceInstance instance = instances.get(0);// 3.根据实例信息拼接 IP 地址String host = instance.getHost();int port = instance.getPort();// 获取打印自定义元数据Map<String, String> metadata = https://www.isolves.com/it/cxkf/jiagou/2021-03-03/instance.getMetadata();Set
Eureka 客户端详解服务提供者(也是 Eureka 客户端)要向 EurekaServer 注册服务,并完成服务续约等工作 。
服务注册详解(服务提供者):
1)当导入了 eureka-client 依赖坐标,配置 Eureka 服务注册中心地址;
2)服务在启动时会向注册中心发起注册请求,携带服务元数据信息;
3)Eureka 注册中心会把服务的信息保存在 Map 中 。
服务续约详解(服务提供者):
服务每隔 30 秒会向注册中心续约 (心跳) 一次(也称为报活),如果没有续约,租约在 90 秒后到期,然后服务会被失效 。每隔 30 秒的续约操作称之为心跳检测 。
- Eureka Client - 30s 续约一次,在 Eureka Server 更新自己的状态(Client 端进行配置) 。
- Eureka Server - 90s 还没有进行续约,将该微服务实例从服务注册表(Map)剔除(Client端进行配置) 。
- Eureka Client - 30s 拉取服务最新的注册表并缓存到本地(Client 端进行配置) 。
- 往往不需要调整这两个配置 。
# 向 Eureka 服务中心集群注册服务eureka:instance:# 租约续约间隔时间,默认 30 秒lease-renewal-interval-in-seconds: 30# 租约到期,服务时效时间,默认值 90 秒, 服务超过 90 秒没有发生心跳,EurekaServer 会将服务从列表移除lease-expiration-duration-in-seconds: 90
获取服务列表(服务注册表)详解(服务消费者):每隔 30 秒服务会从注册中心中拉取一份服务列表,这个时间可以通过配置修改;往往不需要调整 。
# 向 Eureka 服务中心集群注册服务eureka:client:service-url:# 每隔多久拉取一次服务列表registry-fetch-interval-seconds: 30
1)服务消费者启动时,从 Eureka Server 服务列表获取只读备份,缓存到本地 。2)每隔 30 秒,会重新获取并更新数据 。
3)每隔 30 秒的时间可以通过配置 eureka.client.registry-fetch-interval-seconds 修改 。
Eureka 服务端详解服务下线:
1)当服务正常关闭操作时,会发送服务下线的 REST 请求给 Eureka Server 。
2)服务中心接受到请求后,将该服务置为下线状态
失效剔除:
Eureka Server会定时(间隔值是 eureka.server.eviction-interval-timer-in-ms,默认 60s)进行检查,如果发现实例在在一定时间(此值由客户端设置的 eureka.instance.lease-expiration-duration-in-seconds 定义,默认值为 90s)内没有收到心跳,则会注销此实例 。
自我保护机制:
自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使 Eureka 集群更加的健壮、稳定的运行 。
自我保护机制的工作机制是:如果在 15 分钟内超过 85% 的客户端节点都没有正常的心跳,那么 Eureka 就认为客户端与注册中心出现了网络故障,Eureka Server 自动进入自我保护机制,此时会出现以下几种情况:
- Eureka Server 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务 。
- Eureka Server 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用 。
- 当网络稳定时,当前 Eureka Server 新的注册信息会被同步到其它节点中 。
推荐阅读
- 5分钟搭建公网https网页文件服务器,免费权威TLS证书
- 一个比 Nginx 功能更强大的 Web 服务器
- 2021寒假儿童关爱服务四送活动总结?2021寒假儿童关爱服务观后感
- 微型投影仪选购及保养技巧
- 一般公司或者团队是怎么进行代码开发并且部署到服务器上的?
- 微信拉黑后再拉回来对方有提示吗?
- 家用无线路由器DHCP服务器配置方法
- 500行代码,教你用python写个微信飞机大战
- 什么是微内核架构设计?
- 云计算核心技术Docker教程:docker-compose控制服务启动和关闭顺序