您现在的位置是:首页 > 文章详情

java B2B2C源码电子商城系统-Spring Cloud常见问题与总结(二)

日期:2019-05-04点击:338

在使用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)

java B2B2C源码电子商城系统

原文链接:https://yq.aliyun.com/articles/701133
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章