带有 DefaultMessageListenerContainer 的 SingleConnectionyFactory

问题描述

我需要一些有关以下代码的帮助。如下所述,在使用 SingleConnectionFactory 时可以使用 DefaultMessageListenerContainer 吗?由于达到每个客户端的最大连接数,我遇到了 QM 通道断开连接的问题。

JmsListenerContainerFactory<DefaultMessageListenerContainer> createJmsListenerContainerFactory(
        ConnectionFactory cf,DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    configurer.configure(factory,new SingleConnectionFactory(cf));
    factory.setSessionTransacted(true);
    factory.setConcurrency("15-50");
    factory.setSessionAckNowledgeMode(2);
    factory.setBackOff(new FixedBackOff());
    return factory; 
}

这是我的 JmsListener 如何使用它:

    @Bean(name = "containerFactory")
    public MQConnectionFactory mqConnectionFactory(DefaultJmsListenerContainerFactoryConfigurer configurer) throws NamingException {
        //call to createJmsListenerContainerFactory()
    }

    @JmsListener(destination = "queue1",containerFactory = "containerFactory",concurrency = "16-32")

解决方法

是的;但 SCF 应配置为 function destroyer(arr,...valsToRemove) { (而不是 @Bean),以便 Spring 可以管理其生命周期。