java B2B2C源码电子商城系统-Spring Cloud常见问题与总结(二)
在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。
一、整合Hystrix后首次请求失败
1.1 原因分析
Hystrix 默认的超时时间是1秒,如果在1秒内得不到响应,就会进入 fallback 逻辑。由于 Spring 的懒加载机制,首次请求往往会比较慢,因此在某些机器(特别是配置低的机器)上,首次请求需要的时间可能就会大于1秒。
1.2 解决方案
有很多方式解决该问题,下面列举几种比较简单的方案:
1) 方法一:为Ribbon配置饥饿加载。
ribbon: eager-load: enabled: true clients: client1,client2
对于Zuul:
zuul: ribbon: eager-load: enabled: true
2) 方法二:延长 Hystrix 的超时时间,示例如下
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:5000
该配置让 Hystrix 的超时时间改为5秒。
3) 方法三:禁用 Hystrix 的超时,示例如下
hystrix.command.default.execution.timeout.enabled: false
4) 方法四:对于 Feign , 还可以为 Feign 禁用 Hystrix , 示例如下
feign.hystrix.enabled: false
这样即可为 Feign 全局禁用 Hystrix 支持。但该方式比较极端,一般不建议使用。
二、Turbine 聚合数据不完整
在某些版本的Spring Cloud (例如 Brixton SR5)中,Turbine 会发生该问题。该问题的直接观体现是:
使用 Turbine 聚合多个微服务,但在 Hystrix Dashboard 上只能看到部分微服务的监控数据。
现象描述:
比如 Turbine 配置如下:
turbine: appConfig:cloud-consumer-movie,cloud-consumer-movie-feign-hystrix-fallback-stream clusterNameExpression:"'default'"
Turbine 理应聚合 cloud-consumer-movie,cloud-consumer-movie-feign-hystrix-fallback-stream 这两个微服务的监控数据,然而打开 Hystrix Dashboard 时,会发现Dashboard 上只显示部分微服务的监控数据。
解决方案:
当 Turbine 聚合的微服务部署在同一台主机上时,就会出现该问题。
解决方案一:
为各个微服务配置不同的 hostname ,并将 preferIpAddress 设为 false 或者不设置。
eureka: client: serviceUrl: defaultZone:http://127.0.0.1:8001/eureka/ instance: hostname:ribbon # 配置hostname
解决方案二:
设置turbine.combine-host-port = true
turbine: appConfig: cloud-consumer-movie,cloud-consumer-movie-feign-hystrix-fallback-stream clusterNameExpression:"'default'" combine-host-port:true
方法三:
升级 Spring Cloud 到 Camden 或更新版本。当然,也可单独升级 Spring Cloud Netflix 到 1.2.0以上最新稳定版(一般不建议单独升级 Spring Cloud Netflix, 因为可能会跟 Spring Cloud 其他组件冲突)。
这是因为老版本中的 turbine.combine-host-port 默认值是 false 。Spring Cloud 已经意识到该问题,故在新的版本中将该属性的默认值设为 true 。该解决方案和方法二本质是一致的。
相关代码
org.springframework.cloud.netflix.turbine.TurbineProperties.combine-HostPort org.springframework.cloud.netflix.turbine.CommonsInstanceDiscovery.getInstance(String, String, String, Boolean)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java B2B2C Springcloud电子商城系统-Spring Cloud常见问题与总结(四)
一.Spring Cloud定位问题思路总结 SpringCloud进入Camden时代后,已经比较稳定。一般来说,问题都不是SpringCloud本身的Bug导致。建议按照如下步骤进行定位。 1.排查配置问题 首先排查配置问题,举几个简单的例子 YALM缩进是否正确 如果YALM配置文件缩进不正确,SpringCloud应用程序无法正常启动,或配置无法正常加载。 类似问题应该在编码过程中严格避免。 配置属性是否正确 配置属性写错,不少初学者都会遇到这个问题。 很多场景下,这类问题可借助IDE的提示功能来排查——当IDE不自动提示或给出警告时,应格外注意。 配置属性位置是否正确 配置属性位置不正确可能会导致应用的不正常。举几个例子说明: -应当配置在EurekaClient项目上的属性,配置在了EurekaServer项目上。 -应当些在bootstrap.yml中的属性,写在了application.yml中,例如: spring: cloud: config: uri: http://localhost:8080/ -应当写在application.yml中的属性,写在了boots...
- 下一篇
JAVA 多用户商城系统b2b2c-Spring Cloud常见问题与总结(一)
在使用Spring Cloud的过程中,难免会遇到一些问题。所以对Spring Cloud的常用问题做一些总结。 一、Eureka常见问题 1.1 Eureka 注册服务慢 默认情况下,服务注册到Eureka Server的过程较慢。在开发或测试时,常常希望能够加速这一过程,从而提升工作效率。 该问题的原因及解决方案: 服务的注册涉及周期性心跳,默认30秒一次(通过客户端配置的serviceUrl)。只有当实例、服务端和客户端的本地缓存中的元数据都相同时,服务才被其他客户端发现(所以可能需要3次心跳)。可以使用参数 eureka.instance.leaseRenewalInSeconds 修改时间间隔, 从而加快客户端连接到其他服务的过程。在生产环境中最好坚持使用默认值,因为在服务器内部有一些计算,它们会对续约做出假设。 综上所述,要想解决服务注册慢的问题,只须将 eureka.instance.leaseRenewalInSeconds 设成一个更小的值。该配置用于设置 Eureka Client 向 Eureka Server 发送心跳的时间间隔, 默认是30,单位是秒。在生产环...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Red5直播服务器,属于Java语言的直播服务器
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装Docker,最新的服务器搭配容器使用