一 Eureka注册慢问题
默认情况下,服务注册到Eureka Server过程较慢。在开发或测试时,常常希望加速这一过程,从而提高工作效率。服务注册涉及到周期性心跳,默认30秒一次。只有当实例、服务端和客户端的本地缓存中的元数据都相同时,服务才能被其他客户端发现(所以可能需要3次心跳)。可以使用参数eureka.instance.leaseRenewalintervalInSeconds修改时间间隔,从而加快客户端连接到其他服务的过程。在生产环境中最好坚持使用默认值,因为在服务器内部有一些计算,它们会对续约做出假设。综上,要想解决服务注册慢的问题,只须将eureka.instance.leaseRenewalintervalInSeconds设成一个更小的值。该配置用于设置Eureka Client向Eureka Server发送心跳的时间间隔,默认是30,单位是秒。在生产环境中,建议坚持使用默认值。二 已停止的微服务节点注销慢或不注销
1 原因在开发环境下,常常希望Eureka Server能快速有效地注销已停止的微服务实例。然而,由于Eureka Server清理无效节点周期长(默认90秒),以及自我保护模式等原因,可能会遇到微服务注销慢甚至不注销问题。2 解决方法:Eureka Server端:配置关闭自我保护,并按需配置Eureka Server清理无效节点的时间间隔。eureka.server.enable-self-preservation#设为false,关闭自我保护,从而保证会注销微服务eureka.server.eviction-interval-time-in-ms#清理间隔(单位毫秒,默认是60*1000)Eureka Client端:配置开启健康检查,并按需配置续约更新时间和到期时间。eureka.client.healthcheck.enabled#设为true,开启健康检查(需要sping-boot-start-actuator依赖)eureka.instance.lease-renewal-interval-in-seconds#续约更新时间间隔(默认30秒)eureka.instance.lease-expiration-duration-in-seconds#续约到期时间(默认90秒)注意:这些配置仅在开发或测试时使用,生产环境建议坚持使用默认值。3 实例Eureka Server配置:eureka: server: eureka.server.enable-self-preservation: false eureka.server.eviction-interval-time-in-ms: 4000Eureka Client配置:eureka: client: healthcheck: enabled: true instance: lease-expiration-duration-in-seconds: 30 lease-renewal-interval-in-seconds: 10三 如何自定义微服务的Instance ID
Instance ID用于唯一标识注册到Eureka Server上的微服务实例。在Eureka Server首页可以直观地看到各个微服务的Instance ID。在Spring Cloud中,服务的Instance ID默认值是${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}。如果想要自定义这部分内容,只须在微服务中配置eureka.instance.instance-id属性即可,例如:spring: application: name: microservice-prodider-usereureka: instance: #将Instance ID设置为IP:端口的形式 instance-id: ${spring.cloud.client.ipAddress}:${server.port}这样,就可将微服务microservice-prodider-user的Instance ID设为 IP:端口的形式。四 Eureka 的UNKNOWN问题总结与解决
注册UNKNOWN问题,一般分两种情况,一种是应用名称UNKNOWN,另外一种是应用状态UNKNOWN。下面分别讨论这两种情况。1 应用名称UNKNOWN未配置spring.application.name或者eueka.instance.appname属性。如果这两属性都不配置,就会导致应用名称UNKNOWN问题。2 微服务实例状态UNKNOWN微服务实例的状态UNKNOWN同样很麻烦。一般来讲,只会请求状态是UP的微服务。该问题一般由监控检查导致。eureka.client.healthcheck.enabled=true必须设置在application.yml中,而不能设置在bootstrap.yml中,否则一些场景下会导致UNKNOWN的问题。 --------------------- 作者:cakincqm 来源:CSDN 原文:https://blog.csdn.net/chengqiuming/article/details/80948516 版权声明:本文为博主原创文章,转载请附上博文链接!