`
san_yun
  • 浏览: 2594961 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

dubbo导致死锁问题

 
阅读更多

延迟暴露

(+ ) (# )

如果你的服务需要Warmup时间,比如初始化缓存,等待相关资源就位等,可以使用delay进行延迟暴露。

延迟5秒暴露服务:

< dubbo:service delay = "5000" />

延迟到Spring初始化完成后,再暴露服务:(基于Spring的ContextRefreshedEvent事件触发暴露)

< dubbo:service delay = "-1" />
Spring2.x初始化死锁问题
在Spring解析到<dubbo:service />时,就已经向外暴露了服务,而Spring还在接着初始化其它Bean。
如果这时有请求进来,并且服务的实现类里有调用applicationContext.getBean()的用法。

1. 请求线程的applicationContext.getBean()调用,先同步singletonObjects判断Bean是否存在,不存在就同步 beanDefinitionMap进行初始化,并再次同步singletonObjects写入Bean实例缓存。

2. 而Spring初始化线程,因不需要判断Bean的存在,直接同步beanDefinitionMap进行初始化,并同步singletonObjects写入Bean实例缓存。

这样就导致getBean线程,先锁singletonObjects,再锁beanDefinitionMap,再次锁singletonObjects。
而Spring初始化线程,先锁beanDefinitionMap,再锁singletonObjects。
反向锁导致线程死锁,不能提供服务,启动不了。

规避办法
1. 强烈建议不要在服务的实现类中有applicationContext.getBean()的调用,全部采用IoC注入的方式使用Spring的Bean。
2. 如果实在要调getBean(),可以将Dubbo的配置放在Spring的最后加载。
3. 如果不想依赖配置顺序,可以使用<dubbo:provider deplay=”-1” />,使Dubbo在Spring容器初始化完后,再暴露服务。
4. 如果大量使用getBean(),相当于已经把Spring退化为工厂模式在用,可以将Dubbo的服务隔离单独的Spring容器。
分享到:
评论
1 楼 yangpeihai 2016-07-22  

相关推荐

    Dubbo超时机制导致的雪崩连接

    Dubbo超时机制导致的雪崩连接

    dubbo.xsd 文件 解决dubbo标签识别问题

    引入 dubbo框架 需要引用dubbo标签,dubbo.xsd 可以解决标签不识别的问题

    Dubbo空指针问题测试代码.zip

    这是Dubbo空指针问题测试代码,测试Dubbo 2.6.3版本使用XML配置/注解配置+check参数不同情况下,各个场景的异常报错。 建议配合博文使用。

    dubbo资源 dubbo-admin dubbo demo

    dubbo资源 dubbo-admin dubbo demo

    解决dubbo启动报错的问题

    解决dubbo启动报错,加载失败问题。

    dubbo示例代码dubbo-sample

    dubbo示例代码dubbo-sample

    incubator-dubbo-dubbo-2.6.1

    incubator-dubbo-dubbo-2.6.1

    解决springboot 中 dubbo配置的报错问题 dubbo XML Schema 文件

    解决springboot 中 dubbo配置的报错问题 dubbo XML Schema 文件

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo接口测试调试工具

    前段时间排查某问题的时候,想要快速知道某些dubbo接口(三无)的响应结果,但不想启动项目(因为这些项目不是你负责的,不会部署而且超级笨重),也不想新建一个dubbo客户端项目(占地方),也不想开telnet客户端...

    dubbo问题汇总控制台例子

    dubbo资源整合 copy的dubbo简单例子dubbo例子.rar dubbo常见问题 Dubbo FAQ dubbo详解文档 dubbo控制台dubbo-admin-2.5.3.war 资源超过70M 分两次上传

    dubbodubbo.zip

    dubbo资源包

    dubbo捕获自定义异常_dubbo异常捕获_dubbo异常_自定义异常_捕捉异常_

    解决dubbo接口自定义异常的捕捉问题,dubbo消费者可以捕捉到提供者所抛出的自定义异常。

    dubbo视频教程|基于Dubbo的分布式系统架构实战

    Dubbo是阿里巴巴开源的分布式服务化治理框架(微服务框架),久经阿里巴巴电商平台的大规模复杂业务的高并发考验,到目前为止Dubbo仍然是开源界中体系最完善的服务化治理框架,因此Dubbo被国内大量的的互联网公司和...

    dubbo源码解析2

    dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.dubbo源码解析2.

    Dubbo培训与实战

    首先,从知识层面对Dubbo有一个了解和认识,请看《Dubbo培训与实战.pptx》,然后把Dubbo用到实际项目中来,请看实例代码《Dubbo实例代码(Sping+Dubbo+Maven).zip》,里面包括dubboDemoProvide和dubboDemoConsumer...

    dubbo资源,用于解决dubbo问题

    dubbo.xsd文件,用于解决dubbo配置报错。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    dubbo-2.8.4.jar

    dubbox 修改了kryo序列问题 at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.returnFromResponse(DefaultFuture.java:190) at com.alibaba.dubbo.remoting.exchange.support.DefaultFuture.get...

    【BAT必备】dubbo面试题

    【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题【BAT必备】dubbo面试题...

    dubbo+zookeeper缓存方案

    dubbo+zookeeper缓存方案 dubbo+zookeeper缓存方案dubbo+zookeeper缓存方案dubbo+zookeeper缓存方案

Global site tag (gtag.js) - Google Analytics