简体   繁体   English

Spring AMQP中的CannotLoadBeanClassException

[英]CannotLoadBeanClassException in spring amqp

I am very new to spring amqp. 我对amqp的春天很陌生。 I am trying to run a sample application, and the sender code is running successfully but the listener code is throwing an error. 我正在尝试运行示例应用程序,并且发送方代码已成功运行,但是侦听器代码引发了错误。 Please help. 请帮忙。 Please find the codes in the link below - https://www.journaldev.com/11713/spring-amqp-rabbitmq-example 请在下面的链接中找到代码-https: //www.journaldev.com/11713/spring-amqp-rabbitmq-example

The error thrown - 引发的错误-

Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener] for bean with name 'asyncListener' defined in class path resource [springamqp-rabbt-listener-context.xml]; 线程“主”中的异常org.springframework.beans.factory.CannotLoadBeanClassException:找不到类路径资源[springamqp-rabbt-listener]中定义的名称为'asyncListener'的bean的类[com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener] -context.xml]; nested exception is java.lang.ClassNotFoundException: com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener 嵌套的异常是java.lang.ClassNotFoundException:com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener

The error I am getting now when I run the SpringAMQPRabbitListenerContainer.java, is as shown below- 运行SpringAMQPRabbitListenerContainer.java时出现的错误如下所示-

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J:无法加载类“ org.slf4j.impl.StaticLoggerBinder”。 SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. SLF4J:默认为不操作(NOP)记录器实现SLF4J:有关更多详细信息,请参见http://www.slf4j.org/codes.html#StaticLoggerBinder Exception in thread "main" org.springframework.context.ApplicationContextException: Failed to start bean 'myListenerContainer'; 线程“主”中的异常org.springframework.context.ApplicationContextException:无法启动bean'myListenerContainer'。 nested exception is org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:170) at org.springframework.context.support.DefaultLifecycleProcessor.access$1(DefaultLifecycleProcessor.java:154) at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:339) at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:143) at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:108) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:926) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:467) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContex 嵌套异常是org.springframework.amqp.AmqpIllegalStateException:侦听器启动时在org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:170)上发生的致命异常,在org.springframework.context.support.DefaultLifecycleProcessor.access $ 1(DefaultLifecycleProcessor .java:154),位于org.springframework.context.support.DefaultLifecycleProcessor $ LifecycleGroup.start(DefaultLifecycleProcessor.java:339),位于org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:143)。 org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:926)上的context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:108)在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java: 467),位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContex t.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:83) at com.tp.spring_amqp_rabbitmq.SpringAMQPRabbitListenerContainer.main(SpringAMQPRabbitListenerContainer.java:9) Caused by: org.springframework.amqp.AmqpIllegalStateException: Fatal exception on listener startup at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doStart(SimpleMessageListenerContainer.java:333) at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:360) at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:167) ... 9 more Caused by: org.springframework.amqp.rabbit.listener.FatalListenerStartupException: Cannot prepare queue for listener. t.java:139)位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)位于com.tp.spring_amqp_rabbitmq.SpringAMQPRabbitListenerContainer.main(SpringAMQPRabbitListenerContainer.java:9)由org.springframework.amq引起AmqpIllegalStateException:在org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:360)处的org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doStart(SimpleMessageListenerContainer.java:333)上的侦听器启动时发生致命异常org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:167)... 9个以上原因:org.springframework.amqp.rabbit.listener.FatalListenerStartupException:无法为侦听器准备队列。 Either the queue doesn't exist or the broker will not allow us to use it. 要么队列不存在,要么经纪人不允许我们使用它。 at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:228) at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:516) at java.lang.Thread.run(Unknown Source) Caused by: java.io.IOException at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124) at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:120) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142) at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:996) at com.rabbitmq.client.impl.recovery.AutorecoveringChannel.queueDeclarePassive(AutorecoveringChannel.java:364) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.amqp.rabbit.con 在org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:228)在org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer $ AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:516)在java.lang.Thread .run(未知源)由:com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:124)处的java.io.IOException com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java: 120)位于com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:142)位于com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:996)位于com.rabbitmq.client.impl.recovery .java的sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处的sun.reflect.NativeMethodAccessorImpl.invoke(本机方法)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)处的.autorecoveringChannel.queueDeclarePassive(AutorecoveringChannel.java:364) org.springframework.amqp.rabbit.con上的lang.reflect.Method.invoke(未知源) nection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:348) at com.sun.proxy.$Proxy2.queueDeclarePassive(Unknown Source) at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:213) ... 2 more Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; nection.CachingConnectionFactory $ CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:348)位于com.sun.proxy。$ Proxy2.queueDeclarePassive(未知源)位于org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:213) ... 2更多原因:com.rabbitmq.client.ShutdownSignalException:通道错误; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no queue 'tpQueue' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:443) at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:263) at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136) ... 11 more Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; 协议方法:com.rabbitmq.utility.ValueOrException处的#method(reply-code = 404,Reply-text = NOT_FOUND-虚拟主机'/'中没有队列'tpQueue',类ID = 50,方法ID = 10)。 com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36)处的com.rabbitmq.client.impl.AMQChannel $ BlockingRpcContinuation.getReply(AMQChannel.java:443)处的getValue(ValueOrException.java:66) com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:136)处的.client.impl.AMQChannel.privateRpc(AMQChannel.java:263)...另外11个原因:com.rabbitmq.client.ShutdownSignalException:通道错误; protocol method: #method(reply-code=404, reply-text=NOT_FOUND - no queue 'tpQueue' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:509) at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:340) at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:162) at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:109) at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643) at com.rabbitmq.client.impl.AMQConnection.access$300(AMQConnection.java:47) at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:581) ... 1 more 协议方法:com.rabbitmq.client.impl上的#method(reply-code = 404,reply-text = NOT_FOUND-虚拟主机'/'中没有队列'tpQueue',class-id = 50,method-id = 10)。 com.rabbitmq.client.impl上的ChannelN.asyncShutdown(ChannelN.java:509).com com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:162)上的ChannelN.processAsync(ChannelN.java:340) com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:643)上的com.rabbitmq.client.impl.AMQConnection.access $ .300.com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:109) AMQConnection.java:47)at com.rabbitmq.client.impl.AMQConnection $ MainLoop.run(AMQConnection.java:581)...还有1个

You really should be sure that the class com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener is on your classpath. 您确实应该确保com.tp.spring.amqp.rabbit.SpringAMQPRabbitAyncListener类在您的类路径中。

I understand that XML config my mislead, but without that class in the mentioned com.tp.spring.amqp.rabbit package it really isn't going to work. 我知道XML配置是我的误导,但是如果在com.tp.spring.amqp.rabbit包中没有该类,它实际上将无法工作。

Plus pay attention how that class has a type in the Async part. 另外请注意该类在Async部分中的类型。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM