当前位置: 首页 > news >正文

spring cloud gateway openfeign 联合使用产生死锁问题

spring cloud gateway openfeign 联合使用产生死锁问题,应用启动的时候阻塞卡住。

spring.cloud 版本如下

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2020.0.4</version><type>pom</type><scope>import</scope>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

java启动代码

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}

##追溯源码发现 boundedElastic-1线程阻塞在getSingleton方法synchronized (this.singletonObjects)锁上

那这时候主线程是否启动应用完成了呢?答案是没有,主线程也在实例化单例bean路上。追溯源码。主线程也在getSingleton方法synchronized (this.singletonObjects)锁上获取bean,boundedElastic-1线程正是主线程发起的,主线程在这里等待返回。boundedElastic-1线程在等待synchronized (this.singletonObjects)锁释放,主线程在getSingleton方法等待boundedElastic-1线程返回结果, 由此死锁产生了。应用启动阻塞卡住了。

##boundedElastic-1线程产生过程,贴几个重要方法

spring event 事件 onApplicationEvent(ApplicationEvent event) 

routeLocator.ifAvailable(locator -> locator.getRoutes().blockLast()); blockLast方法是阻塞的。导致此bug主要原因。

##线程名字

##工厂生产线程

http://www.lryc.cn/news/334604.html

相关文章:

  • 【WPF应用37】WPF基本控件-DatePicker的详解与示例
  • GitHub教程:最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程)
  • 编译Nginx配置QUIC/HTTP3.0
  • 【JavaWeb】Day38.MySQL概述——数据库设计-DQL
  • 如何使用Java和RabbitMQ实现延迟队列(方式二)?
  • String.valueOf() 将各种数据类型的值转换为它们的字符串
  • 2024-04-08 NO.6 Quest3 自定义交互事件
  • 素描进阶:深入探索如何表现石膏像的质感
  • flutter组件_AlertDialog
  • 供应链领域主题:生产制造关键术语和系统
  • k8s_入门_kubelet安装
  • 主干网络篇 | YOLOv5/v7 更换骨干网络之 HGNetv2 | 百度新一代超强主干网络
  • JUC:ScheduledThreadPoolExecutor 延迟任务线程池的使用
  • js str字符串和arr数组互相转换
  • 计算机网络——40各个层次的安全性
  • OpenHarmony实战:Combo解决方案之W800芯片移植案例
  • 【数据结构】数组(稀疏矩阵、特殊矩阵压缩、矩阵存储、稀疏矩阵的快速转置、十字链表)
  • nginx 配置访问地址和解决跨域问题(反向代理)
  • 支持向量机(SVM)白话之个人理解(学习记录)
  • 【运输层】TCP 的可靠传输是如何实现的?
  • K8s技术全景:架构、应用与优化
  • Java的异常机制
  • 考虑预同步的虚拟同步机T型三电平逆变器并离网MATLAB仿真模型
  • 记一次k8s取证检材过期的恢复
  • 【网站项目】自助购药小程序
  • Ubuntu22.04修改默认窗口系统为X11
  • 延时队列实现实战:如何利用 RabbitMQ 实现延时队列,以满足特定延迟处理需求
  • 关于在Ubuntu上配置mysql踩的一些坑
  • JSBridge原理 - 前端H5与客户端Native交互
  • 【Java EE】Spring请求如何传递参数详解