Classnotfoundexception 导致 SimpleMessagelistenerContainer 停止

Classnotfoundexception causes SimpleMessagelistenerContainer stop

我发现当 listener 抛出一个 classnotfoundexception 时,simplemessagelistenercontainer 将停止并且对序列消息不起作用。

我已将 defaultrejectqueue 设置为 false,我是否也应该捕获所有异常并重新抛出 amqprejectrequeueexception?

2015-11-17 14:15:59.808 ERROR 27121 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Consumer thread error, thread abort. java.lang.NullPointerException: null at java.util.Properties$LineReader.readLine(Properties.java:434) ~[na:1.7.0_45] at java.util.Properties.load0(Properties.java:353) ~[na:1.7.0_45] at java.util.Properties.load(Properties.java:341) ~[na:1.7.0_45] at com.ibm.cds.common.util.Settings.loadSettingResource(Settings.java:73) ~[cds_common-1.0.0.jar!/:61] at com.ibm.cds.common.util.Settings.init(Settings.java:61) ~[cds_common-1.0.0.jar!/:61] at com.ibm.cds.common.util.Settings.(Settings.java:40) ~[cds_common-1.0.0.jar!/:61] ... 22 common frames omitted Wrapped by: java.lang.ExceptionInInitializerError: null at com.ibm.cds.common.util.TemplateUtils.(TemplateUtils.java:57) ~[cds_common-1.0.0.jar!/:61] at com.ibm.cds.oss.response.ResizeServer.sendMail(ResizeServer.java:377) ~[cds_backend_service-1.0.0.jar!/:61] at com.ibm.cds.oss.response.ResizeServer.endProcess(ResizeServer.java:330) ~[cds_backend_service-1.0.0.jar!/:61] at com.ibm.cds.oss.response.AbsResponse.excute(AbsResponse.java:88) ~[cds_backend_service-1.0.0.jar!/:61] at com.ibm.pmc.bss.message.services.OperationResponseService.handleOssResultResponse(OperationResponseService.java:79) ~[pmc-bss-messaging-1.0-SNAPSHOT.jar!/:1.0-SNAPSHOT] at com.ibm.pmc.bss.message.services.OperationResponseService$$FastClassBySpringCGLIB$aa261b.invoke() ~[spring-core-4.2.1.RELEASE.jar!/:1.0-SNAPSHOT] at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.2.1.RELEASE.jar!/:4.2.1.RELEASE] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:649) ~[spring-aop-4.2.1.RELEASE.jar!/:4.2.1.RELEASE] at com.ibm.pmc.bss.message.services.OperationResponseService$$EnhancerBySpringCGLIB$$a3025491.handleOssResultResponse() ~[spring-core-4.2.1.RELEASE.jar!/:1.0-SNAPSHOT] at com.ibm.pmc.bss.message.components.Consumer.receive(Consumer.java:24) ~[pmc-bss-messaging-1.0-SNAPSHOT.jar!/:1.0-SNAPSHOT] at com.ibm.pmc.bss.message.DynamicMessageListenerContainerRegistry.onMessage(DynamicMessageListenerContainerRegistry.java:218) ~[pmc-bss-messaging-1.0-SNAPSHOT.jar!/:1.0-SNAPSHOT] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:800) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:691) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access[=10=]1(SimpleMessageListenerContainer.java:93) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:183) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1345) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:661) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:1096) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:1080) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access0(SimpleMessageListenerContainer.java:93) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1190) ~[spring-rabbit-1.5.1.RELEASE.jar!/:na] at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45] 2015-11-17 14:15:59.812 ERROR 27121 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer 2015-11-17 14:15:59.817 INFO 27121 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Waiting for workers to finish.

不清楚你的意思;如果在初始化期间没有找到 class 那么,当然,容器将不会启动。

如果侦听器在正常消息处理期间抛出 ClassNotFoundException,则消息将被拒绝(并根据配置重新排队或不重新排队);但是容器不会停止。

您需要准确解释您的意思,包括堆栈跟踪(编辑问题 - 不要尝试在评论中添加堆栈跟踪)。

编辑

那里没有 class 未找到异常,只有空指针异常:

2015-11-17 14:15:59.808 ERROR 27121 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Consumer thread error, thread abort. java.lang.NullPointerException: null at java.util.Properties$LineReader.readLine(Properties.java:434) ~[na:1.7.0_45] at java.util.Properties.load0(Properties.java:353) ~[na:1.7.0_45] at java.util.Properties.load(Properties.java:341) ~[na:1.7.0_45] at com.ibm.cds.common.util.Settings.loadSettingResource(Settings.java:73) ~[cds_common-1.0.0.jar!/:61] at com.ibm.cds.common.util.Settings.init(Settings.java:61) ~

这是一个致命错误

14:15:59.812 ERROR 27121 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Stopping container from aborted consumer

您需要修复代码,容器才能启动。