ClassifyService#getClassify() timed-out and no fallback available.] with root cause,未传回数据:null值

本文讲述了在使用SpringCloudAlibaba构建的分布式微服务项目中,遇到的读取数据超时问题。通过调整Feign和Hystrix的超时配置,以及针对不同情况的处理方法,为遇到类似问题的开发者提供解决方案。
摘要由CSDN通过智能技术生成

目录

一、场景介绍

二、处理方式,在api客户端工程配置文件中添加

        1、如果没有开启熔断器,可以利用 Feign 组件的配置,设置连接超时和读取超时这的请求超时时间:

        2、如果开启熔断器,可以利用熔断器hystrix的配置,来设置熔断器判断异常的时间,或者关闭熔断器的异常检测。

三、问题解决:希望能够给遇到该问题的朋友们一个有效的帮助。​编辑​编辑 


一、场景介绍

        遇到的问题,如上图及标题,主要是一个读取数据超时问题导致的,为了让大家明白问题所在,首先先给大家说下我运行的项目框架,主要是一个由Spring CloudAlibaba+Mybatis+Redis+Nacos+OpenFeign等技术组成的一个分布式微服互联网项目。

        在运行主页面显示商品类型的时候,内容却显示不出来,报如上问题,但是我的服务提供确显示数据读取正常,为了让大家看的更清晰,我在服务端页面特意加了缓存的备注,第一次拿出的数据是通过服务端数据库拿到的,完全正常,但是消费者客户端就报错了,这就是我说的读取数据超时问题。

        原因:因为第一次运行拿数据需要调用服务从数据库拿数据,一旦需要查询的数据内容过多执行次数也就多,那么连接和读取的时间也会随之增加,而Feign调用服务的默认时长是1秒,也就是说超过这个时间,就会连接不上或者未响应,紧接着就报错了,而这时服务提供者还在老实本分的完成工作,完成后将查到的数据存入Redis,所以这就导致了服务正常,客户端报错,然后等服务端完成了工作,缓存也有了,前端页面再次刷新就正常了,直接从缓存中拿到数据,如下图:

         有的小伙伴就会说,我怎么没有遇到过这样的问题? 那是因为你数据不多,服务器很快就处理完了,所以不会触发,当你后面遇到的时候就头疼了。还有的会说哪既然这样,让用户多刷新两次不就好了? 说这样话的小伙伴可以去问问你的上面行不行,而且如果不解决,后期涉及熔断器内容的时候,用户第一次进入就会因为报错而跳走,所以今天遇到顺便分享下,也省的踩这个坑。

二、处理方式,在api客户端工程配置文件中添加

        1、如果没有开启熔断器,可以利用 Feign 组件的配置,设置连接超时和读取超时这的请求超时时间:

        这里的10秒并不是说让你的程序运行10秒,而是延长了超时检测的这个时间,比如你项目查询完内容是2秒,那就是2秒,只要不到10秒,都是属于正常的。

#feign客户端连接超时时间设置 /10秒
feign.client.config.default.connectTimeout=10000

#feign客户端读取超时时间设置 /10秒
feign.client.config.default.readTimeout=10000

        2、如果开启熔断器,可以利用熔断器hystrix的配置,来设置熔断器判断异常的时间,或者关闭熔断器的异常检测。

        当然这里的10秒仅是延长了超时检测的时间

#设置hystrix超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000

#关闭超时时间设置
hystrix.command.default.execution.timeout.enabled=false

三、问题解决:希望能够给遇到该问题的朋友们一个有效的帮助。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值