1

您好,我在 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 上做错了什么,因为哪些线程被占用并且从未释放。

先感谢您。

4

0 回答 0