Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SpringRabbit时Tomcat服务器在启动期间挂起_Spring_Rabbitmq_Spring Amqp_Spring Rabbit - Fatal编程技术网

使用SpringRabbit时Tomcat服务器在启动期间挂起

使用SpringRabbit时Tomcat服务器在启动期间挂起,spring,rabbitmq,spring-amqp,spring-rabbit,Spring,Rabbitmq,Spring Amqp,Spring Rabbit,我在我的一个项目中使用了SpringRabbit1.5.1&我有一些自定义代码,可以在启动过程中动态创建侦听器容器对象(不是在配置中,而是通过bean以编程方式创建)。 但服务器似乎永远不会出现和挂起。 当我进行线程转储时,这是我到目前为止发现的 ***"SimpleAsyncTaskExecutor-1" #38 prio=5 os_prio=31 tid=0x00007f84bf220000 nid=0x8503 waiting for monitor entry [0x000000012a

我在我的一个项目中使用了SpringRabbit1.5.1&我有一些自定义代码,可以在启动过程中动态创建侦听器容器对象(不是在配置中,而是通过bean以编程方式创建)。
但服务器似乎永远不会出现和挂起。
当我进行线程转储时,这是我到目前为止发现的

***"SimpleAsyncTaskExecutor-1" #38 prio=5 os_prio=31 tid=0x00007f84bf220000 nid=0x8503 waiting for monitor entry [0x000000012a583000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:187)
- waiting to lock <0x00000007713d46b0> (a java.util.concurrent.ConcurrentHashMap)
at org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:488)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:447)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:423)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:530)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:523)
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1153)
at org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:384)
at org.springframework.amqp.rabbit.core.RabbitAdmin$11.onCreate(RabbitAdmin.java:351)
at org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:32)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:502)
- locked <0x0000000774662870> (a java.lang.Object)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:456)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1158)
at java.lang.Thread.run(Thread.java:745)***
***“SimpleAsyncTaskExecutor-1”#38优先级=5 os\u优先级=31 tid=0x00007f84bf220000 nid=0x8503等待监视器输入[0x000000012a583000]
java.lang.Thread.State:阻塞(在对象监视器上)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:187)
-等待锁定(java.util.concurrent.ConcurrentHashMap)
位于org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:488)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:447)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:423)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:530)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:523)
位于org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1153)
位于org.springframework.amqp.rabbit.core.RabbitAdmin.initialize(RabbitAdmin.java:384)
位于org.springframework.amqp.rabbit.core.RabbitAdmin$11.onCreate(RabbitAdmin.java:351)
位于org.springframework.amqp.rabbit.connection.CompositeConnectionListener.onCreate(CompositeConnectionListener.java:32)
位于org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:502)
-锁定(一个java.lang.Object)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:456)
位于org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1158)
运行(Thread.java:745)***
下面还有一个:

***"SimpleAsyncTaskExecutor-1" #41 prio=5 os_prio=31 tid=0x00007f84bb162800 nid=0x8b03 waiting for monitor entry [0x0000000126e73000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:498)
- waiting to lock <0x0000000774662870> (a java.lang.Object)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
at org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:456)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1158)
at java.lang.Thread.run(Thread.java:745)***
***“SimpleAsyncTaskExecutor-1”#41优先级=5 os\u优先级=31 tid=0x00007f84bb162800 nid=0x8b03等待监视器条目[0x0000000126e73000]
java.lang.Thread.State:阻塞(在对象监视器上)
位于org.springframework.amqp.rabbit.connection.CachingConnectionFactory.createConnection(CachingConnectionFactory.java:498)
-等待锁定(java.lang.Object)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils$1.createConnection(ConnectionFactoryUtils.java:80)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.doGetTransactionalResourceHolder(ConnectionFactoryUtils.java:130)
位于org.springframework.amqp.rabbit.connection.ConnectionFactoryUtils.getTransactionalResourceHolder(ConnectionFactoryUtils.java:67)
位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:456)
位于org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1158)
运行(Thread.java:745)***

我不知道如何克服这个问题。期待一些输入/指导来解决这个问题。

您需要显示您的代码;您说您是以编程方式(在Spring之外)创建容器,但您是通过
RabbitAdmin
与应用程序上下文交互的

你不能两全其美;要么使用上下文,要么不使用上下文

你需要找到哪个线程拥有这个锁

waiting to lock <0x00000007713d46b0>
等待锁定
你也许能想出一个解决办法

一种可能是使用单独的连接工厂(在Spring应用程序上下文之外创建),这样就不会调用rabbit管理员来声明队列等

另一种方法可能是通过将
autoStartup
设置为false来禁用
RabbitAdmin
自动声明


但是,第一步是找出谁拥有这个锁。

在春季启用调试日志记录后,我注意到的另一个信息是,bean在之前初始化了一次,之后,当这个问题出现时,整个过程又重新开始了。谢谢你的评论。我试图创建一个示例代码来显示这种行为,但未能做到!我无法显示我正在编写的代码(它不是公开的)&我希望您理解。我“确实理解”在这里拥有这段代码的必要性。然而,当我创建一个不同的连接工厂时,你的建议对我起了作用。我会接受这个答案,只要我完成了一些测试。再次感谢。