长期存在的JMS会话.保持JMS连接/ JMS会话总是打开一个坏习惯吗?

Joã*_*oão 10 java jms

保持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();
Run Code Online (Sandbox Code Playgroud)

有什么建议可以改善这种JMS使用模式吗?

Jam*_*han 8

同意.以下是有关如何有效使用JMS的一些好技巧,其中包括保持连接/会话/生产者/消费者.

如果您对最大化性能感兴趣,您可能还想检查有关使用事务建议.


Joh*_*her 6

在处理长期存在的连接时,这是一种非常普遍和可接受的做法.对于许多JMS服务器,实际上最好在每次需要时创建新连接.


Sha*_*shi 5

保持连接/会话/生产者/消费者长时间不打开的选择应该基于生产者/消费者发送/接收消息的频率.

如果生产者发送或消费者经常收到消息,那么连接/会话/生产者/消费者应该保持打开状态.另一方面,如果消息发送/接收不频繁,那么保持这些JMS对象打开将消耗系统资源(如套接字)是不好的.