【问题标题】:SingleConnectionyFactory with DefaultMessageListenerContainerSingleConnectionyFactory 与 DefaultMessageListenerContainer
【发布时间】:2021-03-29 16:07:09
【问题描述】:

我需要以下代码的帮助。如下所述使用DefaultMessageListenerContainer 时使用SingleConnectionFactory 可以吗?由于达到每个客户端的最大连接数,我遇到了 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")

【问题讨论】:

    标签: java spring-jms


    【解决方案1】:

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

    【讨论】:

    • 谢谢加里。它会影响我的应用程序的性能吗?
    • 我不希望这样,除非您的容量非常大 - 全部都将通过同一个连接。
    • 我的应用程序正在处理大量消息。使用 CachingConnectionFactory 将缓存消费者和生产者属性保持为“假”是个好主意吗?
    • 否;您不得缓存具有可变并发性的消费者;您最终可能会在缓存中找到空闲的消费者,而代理不知道他们是空闲的;单个容器是最好的。无论如何,容器消费者都是长期运行的,所以不需要缓存。最好在使用和不使用单个连接的情况下测试性能配置文件以确定对特定环境的影响。禁用缓存的缓存工厂实际上与单个工厂相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2012-09-16
    • 2012-08-16
    • 2015-02-25
    • 1970-01-01
    相关资源
    最近更新 更多