在我的 java swing 应用程序中,我实现了一个与 jms 服务器通信的 jms 客户端。这工作得很好。
当前,当我的应用程序启动时,我创建一个连接和一个 session :
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 保存在某处并重新使用它。当我决定重新使用这些对象时,有什么特别需要注意的吗?
最佳答案
您应该重用您能够重用的对象。
该连接可能会被整个应用程序重复使用,因为它是线程安全的。
session 对象不是线程安全的,在这种情况下,您应该坚持每个线程一个 session 。
你可以作弊。使用 org.apache.activemq.pool.PooledConnectionFactory ,它将设置一个 session 、连接和生产者池。
您仍然需要编写connection.createSession(..
)和session.close()
,但这只是从池中获取和释放对象。
如果您对并发性有细粒度的控制,那么实际重用对象可能会更容易,但这种情况很少发生。
关于java - Jms在swing应用程序中发送消息时的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14773852/