突然临时介入排查、解决问题。
问题
HttpURLConnection请求指定url请求过多导致报错。
原因
使用@EventListener(ContextRefreshedEvent.class),服务启动、Spring加载时导致重复执行方法、触发大量开启线程,不同线程发起不同HttpURLConnection连接和请求,导致因请求过多而连接、限流异常,报错(不清楚使用@EventListener(ContextRefreshedEvent.class)的背景和考虑)。
解决
1、通过过滤异常请求错误信息、增加请求间隔时间、关闭报错线程(通过Thread.interrupt()发送中断信号)、增加线程池核心线程最大线程等,问题减轻但仍存在。
2、由使用ApplicationRunner解决。
3、改用ApplicationReadyEvent。(未尝试)该事件仅在应用完全就绪后触发一次,适合不依赖动态刷新的初始化场景。
4、改用xxl-job。
5、其他。
分析

EventListener(ContextRefreshedEvent.class)反复执行原因可能有:
(1)Nacos配置刷新触发上下文重启(配置无变更、无此可能)
Nacos通过HTTP长轮询向服务端发起请求,服务端若检测到配置变更发布RefreshEvent,导致Spring Cloud刷新@RefreshScope标记的Bean,并可能间接触发ApplicationContext的刷新操作,从而多次发布ContextR

最低0.47元/天 解锁文章
834

被折叠的 条评论
为什么被折叠?



