保持JMS连接/会话/消费者总是打开一个坏习惯吗?
代码草案示例:
// app startup code ConnectionFactory cf = (ConnectionFactory)jndiContext.lookup(CF_JNDI_NAME); Connection connection = cf.createConnection(user,pass); Session session = connection.createSession(true,Session.TRANSACTIONAL); MessageConsumer consumer = session.createConsumer(new Queue(queueName)); consumer.setMessageListener(new MyListener()); connection.start(); connection.setExceptionListener(new MyExceptionHandler()); // handle connection error // ... Message are processed on MyListener asynchronously ... // app shutdown code consumer.close(); session.close(); connection.close();
有什么建议可以改善这种JMS使用模式吗?
同意.以下是有关如何有效使用JMS的一些好技巧,其中包括保持连接/会话/生产者/消费者.
如果您对最大化性能感兴趣,您可能还想检查有关使用事务的建议.
在处理长期存在的连接时,这是一种非常普遍和可接受的做法.对于许多JMS服务器,实际上最好在每次需要时创建新连接.
保持连接/会话/生产者/消费者长时间不打开的选择应该基于生产者/消费者发送/接收消息的频率.
如果生产者发送或消费者经常收到消息,那么连接/会话/生产者/消费者应该保持打开状态.另一方面,如果消息发送/接收不频繁,那么保持这些JMS对象打开将消耗系统资源(如套接字)是不好的.