我有一个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个消费者?
答案 0 :(得分:0)
Spring的DefaultJmsListenerContainerFactory
的缓存级别可以更改为CACHE_NONE
,CACHE_CONNECTION
,CACHE_SESSION
或CACHE_AUTO
。
为了使Spring在连接工厂中创建多个连接,我必须将其设置为CACHE_NONE
。