负载平衡客户端会话

问题描述 投票:0回答:1

我有一个2服务器ActiveMQ Artemis集群设置与发现使用JGroups正常工作。然后在我的应用程序中,ConnectionFactory通过ActiveMQJMSClient创建:

final ActiveMQConnectionFactory cf = ActiveMQJMSClient.createConnectionFactory(
    "jgroups://test-cluster?file=jgroups-file-ping.xml&connectionLoadBalancingPolicyClassName=org.apache.activemq.artemis.api.core.client.loadbalance.RoundRobinConnectionLoadBalancingPolicy", "test-cluster");

然后生产者和消费者用Spring处理。然而,当Spring在初创公司创建了10个消费者时,我发现所有10个消费者都去了同一个Artemis服务器。

这是Spring JMS配置:

@Bean 
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() throws Exception {
    final ConnectionFactory cf = getActiveMQConnectionFactory();
    final DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setConnectionFactory(cf);
    factory.setConcurrency("10-20");
    factory.setSessionTransacted(true);
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);

    return factory;
}

然后在应用程序启动时,我在JmsListenerConfigurer中调用它:

public static void registerEndPoint(final JmsListenerEndpointRegistrar registrar,
    String endPointName, String dest, MessageListener listener) {
    final SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();

    endpoint.setId(endPointName);
    endpoint.setDestination(dest);
    endpoint.setMessageListener(listener);
    registrar.registerEndpoint(endpoint);
}

有没有办法设置它,以便每个Artemis服务器上有5个消费者?

java jms spring-jms activemq-artemis
1个回答
0
投票

Spring的DefaultJmsListenerContainerFactory有一个缓存级别,可以更改为CACHE_NONECACHE_CONNECTIONCACHE_SESSIONCACHE_AUTO

我必须将它设置为CACHE_NONE for Spring才能在连接工厂中创建多个连接。

© www.soinside.com 2019 - 2024. All rights reserved.