Клиентские сеансы балансировки нагрузки

У меня есть 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 запускает 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 потребителей?

1 ответ

Спринга DefaultJmsListenerContainerFactory имеет уровень кэша, который можно изменить на CACHE_NONE,CACHE_CONNECTION,CACHE_SESSION или же CACHE_AUTO,

Я должен был установить его CACHE_NONE для Spring создать более одного соединения в фабрике соединений.

Другие вопросы по тегам