zoukankan      html  css  js  c++  java
  • springcloud常见问题总结以(一)

    一, Eureka常见问题

    1. Eureka注册服务慢

    1. 服务注册涉及到周期性的心跳,默认30秒一次,只有当实例、服务器端和客户端本地缓存中的元数据都相同时,服务才能被其他客户端发现(可能需要三次心跳)。
    2. 可以使用参数eureka.instance.leaseRenewalintervalInSeconds修改eureka client向eureka server发送心跳间隔,从而加快客户端连接到其他服务的过程。
      在生产环境中最好坚持使用默认值,因为在服务器内部有一些计算,它们会对续约做出假设。

    2. 已停止的服务节点注销慢或者不注销

    1. Eureka server清理无效节点的周期比较长(默认90秒),以及自我保护等原因,可能对服务节点注销慢或者不注销
    2. Eureka server配置关闭自我保护,并按需配置清理无效节点的间隔:
            eureka:
              server:
                enable-self-preservation: false   # 测试时关闭自我保护机制,保证不可用服务及时踢出
                eviction-interval-timer-in-ms: 30000        # 清理间隔 单位是毫秒
    
    1. Eureka client端开启健康检查,按需配置续约更新时间和到期时间:
            eureka:
                client:
                    healthcheck:
                      enabled: true  #开启健康检查(需要spring-boot-starter-actuator依赖)
                instance:
                      lease-renewal-interval-in-seconds: 1  # 每间隔1s,向服务端发送一次心跳,证明自己依然”存活“, 默认30秒
                      lease-expiration-duration-in-seconds: 2 # 告诉服务端,如果我2s之内没有给你发心跳,就代表我“死”了,将我踢出掉, 默认90秒。
        注意:
            这些配置一般在开发测试的时候使用,生产环境建议使用默认配置
    
    1. 自定义微服务instanceID
    eureka:
      instance:
          instance-id: ${spring.cloud.client.ipAddress}:${server.port}  # 将instance-id设置为ip:端口的形式。
    

    二, Hystrix常见问题

    1. Hystrix/feign 整合Hystrix后首次访问失败的问题

    1. Hystrix默认超时时间是1秒,首次加载的时候因为服务器缓存,或者创建连接池等原因,就会进入fallback逻辑。由于spring的懒加载机制,因此在某些机器上首次请求的时间可能大于1秒
    2. 解决方案一,延长Hystrix超时时间:
      代码中修改默认超时配置(改为3秒):
                @HystrixCommand(commandProperties = {
                     @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")
                })
                public String serverMethod() {
                  return null;
                }
            application.properties中设置默认超时时间:
            1.默认:(方法上记得要加上@HystrixCommand,否则无效):
            hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
            2.配置具体方法的超时时间
            hystrix.command.serverMethod.execution.isolation.thread.timeoutInMilliseconds=3000
    
    1. 解决方案二,禁用Hystrix超时:
      hystrix.command.default.execution.timeout.enabled: false
    2. 对于feign,可以禁用feign的hystrix功能
      feign.hystrix.enabled: false #比较极端,一般不建议使用

    三, springcloud 问题定位思路总结

    1. YAML缩进是否正确:
      YAML缩进不正确会导致springcloud 应用无法正常启动或者配置文件无法加载
    2. 配置属性是否正确:
    3. 配置属性位置是否正确:
      -应当配置在Eureka client 的属性配置在了Eureka server
      -应当配置在bootstrap.yml的属性,写在了application.yml中,例如:
      spring.cloud.config.uri= http://...
      -应当配置在application.yml的属性,写在了bootstrap.yml中,例如:
      eureka.client.healthcheck.enabled= true

    吐槽:博客园的markdown编辑器怎么这么难用

    四, springcloud 升级到G版本后网关springcloud-gateway报错 java.lang.NullPinterExcetervalue:.value 异常

    经过排查发现是因为在路由转发请求头时没有判断值为null的情况导致,过滤掉head为null的情况即可解决

  • 相关阅读:
    ionic3使用@angular/http 访问nodejs(koa2框架)服务不能返回数据
    FacebookFriendAdderPro
    SEO记录-1
    thanos 实现 prometheus 高可用 数据持久化2
    Prometheus + consul + grafana 监控体系搭建1
    解决问题方法
    原则设定
    docker-基本概念、架构和使用
    如何有效学习
    社会~
  • 原文地址:https://www.cnblogs.com/qmuyw/p/12901342.html
Copyright © 2011-2022 走看看