2

在我的 java swing 应用程序中,我实现了一个与 jms 服务器通信的 jms 客户端。这工作正常。

目前,当我的应用程序启动时,我创建了一个连接和一个会话:

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

接下来,当我需要向主题发送消息时,我创建一个主题(将消息发送到)、一个临时队列(接收回复)、一个生产者(发送消息)和一个消费者(实际阅读回复) :

Destination destination = session.createTopic ...
MessageProducer producer = session.createProducer ...
Destination tempDest = session.createTemporaryQueue(); 
MessageConsumer responseConsumer = session.createConsumer(tempDest);
producer.send(msg);

我想知道在这种情况下最佳做法是什么?

当我需要发送消息时,我是否可以简单地创建所有内容,或者将 Destination、MessageProducer、MessageConsumer 保存在某处并重新使用它会更好。当我决定重新使用这些对象时,有什么特别需要注意的吗?

4

1 回答 1

3

您应该重用您能够重用的对象。

该连接可能会重新用于您的整个应用程序,因为它是线程安全的。

会话对象不是线程安全的,在这种情况下,您应该坚持每个线程一个会话。

你可以作弊。使用org.apache.activemq.pool.PooledConnectionFactory它,它将设置一个会话池、连接池和生产者池。

您仍然需要编写connection.createSession(..session.close()但这只是从池中获取和释放对象。

如果您对并发有细粒度的控制,那么实际重用您的对象可能会更容易,但这种情况很少发生。

于 2013-02-08T14:27:38.133 回答