随笔 - 836  文章 - 1 评论 - 40 阅读 - 102万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

 

项目使用Spring cloud,nacos作为注册中心。RPC使用的Feign。

在项目第一次启动的时候,访问链接会很慢,然后再次访问就会正常。

原因:Feign默认使用了Ribbon作为负载,然而Ribbon的默认加载策略是懒加载。当第一次访问的时候,不仅会发送访问请求,还有初始化相关的服务。

解决方式:

官方给出的解释是饥饿加载相关服务:

  1.  
    ribbon.eager-load.enabled=true
  2.  
    ribbon.eager-load.clients=服务名

还有可以在服务端禁用ribbon的hystrix:

feign.hystrix.enabled=false

同样也可以起到作用。

 

spring cloud gateway中解决第一次请求失败的问题

 

在项目中使用spring cloud gateway之后中,发现第一次路由请求都会失败。

百度了一下,知道是hystix timeout的问题:

即Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。

而首次请求往往会比较慢(因为Spring的懒加载机制,要实例化一些类),这个响应时间可能就大于1秒了。

一般有三种解决方案:

1)延长hystix的连接超时时间,默认时间是1秒

//在Fegion服务的application配置文件中添加一下配置:
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds:5000


2)禁用hystix的超时时间

//在Fegion服务的application配置文件中添加一下配置:
hystrix.command.default.execution.timeout.enabled: false


3)直接禁用hystix

//在Fegion服务的application配置文件添加如下配置信息:
feign.hystrix.enabled: false

 

个人感觉第2/3方案都太简单粗暴了,后面也会出现其他问题,所以先试试第1个方案。

posted on   lshan  阅读(1395)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2021-05-17 Doris 初识 -安装
2019-05-17 FutureTask demo springboot
点击右上角即可分享
微信分享提示