我有以下Java类。与CachingConnectionFactory
一起使用时,它会在ConcurrentConsumers
上创建配置的DefaultMessageListenerContainer
个设置。但是,如果使用的是PooledConnectionFactory
而不是CachingConnectionFactory
,则只会创建concurrentConsumers
等于maximumActiveSessionPerConnection
上设置的PooledConnectionFactory
,而不是设置为concurrentConsumers
的数量DefaultMessageListenerContainer
。
如何确保DefaultMessageListenerContainer
使用PooledConnectionFactory
提供的多个连接/会话,并为concurrentConsumer
创建已配置的DefaultMessageListenerContainer
个 import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.jms.pool.PooledConnectionFactory;
import org.springframework.jms.listener.DefaultMessageListenerContainer;
public class ActiveMQMainTest {
public static void main(String[] args) {
String queueUrl = "tcp://localhost:61616";
ActiveMQQueue queue = new ActiveMQQueue("request.queue");
final ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(queueUrl);
PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory();
pooledConnectionFactory.setConnectionFactory(connectionFactory);
pooledConnectionFactory.setCreateConnectionOnStartup(false);
pooledConnectionFactory.setMaxConnections(5);
pooledConnectionFactory.setMaximumActiveSessionPerConnection(100);
pooledConnectionFactory.start();
// CachingConnectionFactory pooledConnectionFactory = new CachingConnectionFactory(connectionFactory);
DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setConnectionFactory(pooledConnectionFactory);
defaultMessageListenerContainer.setDestination(queue);
defaultMessageListenerContainer.setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
defaultMessageListenerContainer.setConcurrentConsumers(5);
defaultMessageListenerContainer.setMaxConcurrentConsumers(5 * 2);
defaultMessageListenerContainer.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE);
defaultMessageListenerContainer.setSessionTransacted(true);
JmsMessageListener messageListener = new JmsMessageListener();
defaultMessageListenerContainer.setMessageListener(messageListener);
defaultMessageListenerContainer.afterPropertiesSet();
defaultMessageListenerContainer.start();
try {
Thread.sleep(1000 * 60 * 10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
。下面是检查相同内容的简单示例。
var values = ['51', '127', ...];
$("#select option").filter(function(i, opt) {
return $.inArray(opt.value, values) > -1;
}).remove();
答案 0 :(得分:0)
DMLC
默认使用共享连接(当没有事务管理器时)。可以使用以下方法禁用它:
dmlc.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE);
你通常也应该使用DMLC setSessionTransacted(true)
,以避免丢失消息的可能性(使用DMLC,在调用监听器之前确认消息),使用本地事务,ack不会去听经纪人,直到听众正常退出。