Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/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
应用程序运行时Spring JmsListener启动/停止_Spring_Spring Boot_Jms_Spring Jms - Fatal编程技术网

应用程序运行时Spring JmsListener启动/停止

应用程序运行时Spring JmsListener启动/停止,spring,spring-boot,jms,spring-jms,Spring,Spring Boot,Jms,Spring Jms,在应用程序运行时,启动JmsListener时遇到问题。 我试过了,但是运气不好 在我的JmsListenerContainerFactory中,我已将AutoStart设置为false,并且有消息等待在队列中。但是当我在下面的代码中调用控制器时,什么都没有发生。JmsLister不会开始使用消息 任何帮助都将不胜感激 控制器代码: @RestController 公共类消息控制器{ 专用最终JmsListenerEndpointRegistry JmsListenerEndpointRegis

在应用程序运行时,启动JmsListener时遇到问题。 我试过了,但是运气不好

在我的
JmsListenerContainerFactory
中,我已将AutoStart设置为false,并且有消息等待在队列中。但是当我在下面的代码中调用控制器时,什么都没有发生。JmsLister不会开始使用消息

任何帮助都将不胜感激

控制器代码:

@RestController
公共类消息控制器{
专用最终JmsListenerEndpointRegistry JmsListenerEndpointRegistry;
public MessageController(JmsListenerEndpointRegistry JmsListenerEndpointRegistry){
this.jmsListenerEndpointRegistry=jmsListenerEndpointRegistry;
}
@GetMapping(“消息/开始”)
公共响应启动(){
if(jmsListenerEndpointRegistry.isRunning())
return ResponseEntity.badRequest().build();//第二次请求此端点时,它会说它正在运行
jmsListenerEndpointRegistry.GetListenerContainerId().forEach(id->{
MessageListenerContainer listenerContainer=jmsListenerEndpointRegistry.getListenerContainer(id);
if(listenerContainer!=null){
listenerContainer.start();
}
});
jmsListenerEndpointRegistry.start();
返回ResponseEntity.ok().build();
}
}
编辑:这是我向控制器发送请求时的调试日志:

19:59:41.231 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - GET "/messages/start", parameters={}
19:59:41.238 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to MessageController#start()
19:59:53.764 [http-nio-8080-exec-2] DEBUG o.a.a.transport.WireFormatNegotiator - Sending: WireFormatInfo { version=12, properties={StackTraceEnabled=true, PlatformDetails=Java, CacheEnabled=true, Host=mqserver, TcpNoDelayEnabled=true, SizePrefixDisabled=false, CacheSize=1024, ProviderName=ActiveMQ, TightEncodingEnabled=true, MaxFrameSize=9223372036854775807, MaxInactivityDuration=30000, MaxInactivityDurationInitalDelay=10000, ProviderVersion=5.15.11}, magic=[A,c,t,i,v,e,M,Q]}
19:59:53.773 [ActiveMQ Transport: tcp://mqserver/127.0.0.1:49040@48600] DEBUG o.a.a.transport.InactivityMonitor - Using min of local: WireFormatInfo { version=12, properties={StackTraceEnabled=true, PlatformDetails=Java, CacheEnabled=true, Host=mqserver, TcpNoDelayEnabled=true, SizePrefixDisabled=false, CacheSize=1024, ProviderName=ActiveMQ, TightEncodingEnabled=true, MaxFrameSize=9223372036854775807, MaxInactivityDuration=30000, MaxInactivityDurationInitalDelay=10000, ProviderVersion=5.15.11}, magic=[A,c,t,i,v,e,M,Q]} and remote: WireFormatInfo { version=9, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, StackTraceEnabled=true, CacheEnabled=true, MaxFrameSize=9223372036854775807, TightEncodingEnabled=true, MaxInactivityDuration=30000, MaxInactivityDurationInitalDelay=10000}, magic=[A,c,t,i,v,e,M,Q]}
19:59:53.774 [ActiveMQ Transport: tcp://mqserver/127.0.0.1:49040@48600] DEBUG o.a.a.transport.WireFormatNegotiator - Received WireFormat: WireFormatInfo { version=9, properties={CacheSize=1024, SizePrefixDisabled=false, TcpNoDelayEnabled=true, StackTraceEnabled=true, CacheEnabled=true, MaxFrameSize=9223372036854775807, TightEncodingEnabled=true, MaxInactivityDuration=30000, MaxInactivityDurationInitalDelay=10000}, magic=[A,c,t,i,v,e,M,Q]}
19:59:53.774 [ActiveMQ Transport: tcp://mqserver/127.0.0.1:49040@48600] DEBUG o.a.a.transport.WireFormatNegotiator - tcp://mqserver/127.0.0.1:49040@48600 before negotiation: OpenWireFormat{version=12, cacheEnabled=false, stackTraceEnabled=false, tightEncodingEnabled=false, sizePrefixDisabled=false, maxFrameSize=9223372036854775807}
19:59:53.790 [ActiveMQ Transport: tcp://mqserver/127.0.0.1:49040@48600] DEBUG o.a.a.transport.WireFormatNegotiator - tcp://mqserver/127.0.0.1:49040@48600 after negotiation: OpenWireFormat{version=9, cacheEnabled=true, stackTraceEnabled=true, tightEncodingEnabled=true, sizePrefixDisabled=false, maxFrameSize=9223372036854775807}
19:59:53.895 [http-nio-8080-exec-2] DEBUG o.s.j.l.DefaultMessageListenerContainer - Established shared JMS Connection
19:59:53.896 [http-nio-8080-exec-2] DEBUG o.s.j.l.DefaultMessageListenerContainer - Resumed paused task: org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@4fc72d52
20:00:00.326 [DefaultMessageListenerContainer-1] DEBUG o.a.a.thread.TaskRunnerFactory - Initialized TaskRunnerFactory[ActiveMQ Session Task] using ExecutorService: java.util.concurrent.ThreadPoolExecutor@4364b2e9[Running, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
编辑:
我在测试错误的ActiveMq实例,但接受的答案帮助我以一种简单有效的方式测试和调试“错误”

奇怪;这对我来说很好

@springboot应用程序
公共类SO60762328应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(So60762328Application.class,args);
}
@JmsListener(destination=“foo”)
公共void侦听(字符串输入){
系统输出打印项次(输入);
}
@豆子
公共应用程序运行程序(JmsTemplate模板,默认JMSListenerContainerFactory,
JmsListenerEndpointRegistry(注册中心){
工厂设置自动启动(错误);
返回参数->{
模板.convertAndSend(“foo”、“bar”);
System.out.println(“点击回车启动容器)”;
System.in.read();
registry.getListenerContainers().forEach(container->container.start());
};
}
}

您似乎缺少注册模式0的缓存JMS会话:


尝试将日志级别提升到跟踪级别。

奇怪;这对我来说很好

@springboot应用程序
公共类SO60762328应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(So60762328Application.class,args);
}
@JmsListener(destination=“foo”)
公共void侦听(字符串输入){
系统输出打印项次(输入);
}
@豆子
公共应用程序运行程序(JmsTemplate模板,默认JMSListenerContainerFactory,
JmsListenerEndpointRegistry(注册中心){
工厂设置自动启动(错误);
返回参数->{
模板.convertAndSend(“foo”、“bar”);
System.out.println(“点击回车启动容器)”;
System.in.read();
registry.getListenerContainers().forEach(container->container.start());
};
}
}

您似乎缺少注册模式0的缓存JMS会话:


尝试将日志级别提升到跟踪级别。

看起来正常;您是否尝试过启用调试日志记录?或者在调试器中运行?使用调试日志编辑问题看起来正常;您是否尝试过启用调试日志记录?或者在调试器中运行?使用调试日志编辑问题可能会进行线程转储,以查看
[DefaultMessageListenerContainer-1]
线程正在做什么(或者是否缺少)。一种可能是容器的
TaskExecutor
没有可用线程。默认executor.Omg不会出现这种情况,我有用于不同环境的activemq实例,但它们之间的唯一区别是端口号,并且在错误的实例上进行了测试:/。但是我接受你的回答,因为你给我提供了一个巧妙的测试应用程序。它真的,真的帮了我调试!可能需要进行线程转储以查看
[DefaultMessageListenerContainer-1]
线程正在做什么(或者是否缺少)。一种可能是容器的
TaskExecutor
没有可用线程。默认executor.Omg不会出现这种情况,我有用于不同环境的activemq实例,但它们之间的唯一区别是端口号,并且在错误的实例上进行了测试:/。但是我接受你的回答,因为你给我提供了一个巧妙的测试应用程序。它真的,真的帮了我调试!
Hit Enter to start container(s)

2020-03-19 15:18:47.046 DEBUG 46151 --- [           main] o.s.j.l.DefaultMessageListenerContainer  : Established shared JMS Connection
2020-03-19 15:18:47.046 DEBUG 46151 --- [           main] o.s.j.l.DefaultMessageListenerContainer  : Resumed paused task: org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@189aa67a
2020-03-19 15:18:47.047 DEBUG 46151 --- [enerContainer-1] o.s.j.c.CachingConnectionFactory         : Registering cached JMS Session for mode 0: ActiveMQSession {id=ID:Gollum2.local-53059-1584645521078-4:1:2,started=true} java.lang.Object@5f2fc1ae
2020-03-19 15:18:47.057 DEBUG 46151 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer  : Received message of type [class org.apache.activemq.command.ActiveMQTextMessage] from consumer [ActiveMQMessageConsumer { value=ID:Gollum2.local-53059-1584645521078-4:1:2:1, started=true }] of session [Cached JMS Session: ActiveMQSession {id=ID:Gollum2.local-53059-1584645521078-4:1:2,started=true} java.lang.Object@5f2fc1ae]
2020-03-19 15:18:47.058 DEBUG 46151 --- [enerContainer-1] .s.j.l.a.MessagingMessageListenerAdapter : Processing [org.springframework.jms.listener.adapter.AbstractAdaptableMessageListener$MessagingMessageConverterAdapter$LazyResolutionMessage@564c24f3]
bar