您好,我在 tomcat 中部署了一个 Spring Boot 应用程序作为战争。我正在收听应用程序中有关 jms 主题的消息。我有一个 TIBCO 消息代理,以下是我用于收听消息的一小段代码-
@Bean
public TibjmsConnectionFactory tibjmsconnectionfactory(){
TibjmsConnectionFactory tibjmsconnectionFactory=new TibjmsConnectionFactory("http://172.16.23.1");
tibjmsconnectionFactory.setUsername("abcd");
tibjmsconnectionFactory.setUserPassword("abcd");
return tibjmsconnectionFactory;
}
@Bean
public DefaultJmsListenerContainerFactory defaultjms(){
DefaultJmsListenerContainerFactory defaultJmsContainerFactory=new DefaultJmsContainerFactory();
defaultJmsListenerContainerFactory.setConnectionFactory(tibjmsconnectionFactory());
return defaultJmsContainerFactory;
}
我有一个用@JmsListener 注释的方法,我正在接收传入的消息。
@JmsListener(destination="topic1",selector=MY_SELECTOR)
public void onMessage(String msg){
//Do something with message
}
当主题上存在大量流量时(因此收到大量消息),应用程序中的线程数会增加,并且永远不会下降。此外,有时内存会增加,如果内存最终会耗尽应用程序。我有大约 3 GB 的堆,在大约 30-40 分钟内收到的消息量约为 400,000。
我想知道,如果我在上面的 JMS bean 上做错了什么,因为哪些线程被占用并且从未释放。
先感谢您。