Java swing应用程序中的Jms发送消息时的最佳实践?

Java swing应用程序中的Jms发送消息时的最佳实践?,java,queue,jms,activemq,Java,Queue,Jms,Activemq,在我的JavaSwing应用程序中,我实现了一个与jms服务器通信的jms客户机。这个很好用 当前,当我的应用程序启动时,我会创建连接和会话: ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory connection = connectionFactory.createConnection(); connection.start(); session = connection.createSess

在我的JavaSwing应用程序中,我实现了一个与jms服务器通信的jms客户机。这个很好用

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

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
接下来,当我需要向某个主题发送消息时,我会创建一个主题(将消息发送到)、一个临时队列(接收回复)、一个生产者(发送消息)和一个消费者(实际读取回复):

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


当我需要发送消息时,我可以简单地创建所有内容吗?或者最好将目的地、消息生产者、消息消费者保存在某个位置并重新使用。当我决定重新使用这些对象时,有什么特别的地方需要注意吗?

您应该重新使用能够重新使用的对象

整个应用程序的连接可能会恢复,因为它是线程安全的

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

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

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


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

感谢您的输入,它非常有用。特别是关于线程安全和连接池的内容。
Destination destination = session.createTopic ...
MessageProducer producer = session.createProducer ...
Destination tempDest = session.createTemporaryQueue(); 
MessageConsumer responseConsumer = session.createConsumer(tempDest);
producer.send(msg);