我正在开发一个较旧的应用程序并将其 JMS 系统从 JBoss Messaging 升级到 HornetQ,在此过程中我遇到了一些似乎与该应用程序如何使用和管理 JMS 连接有关的问题。这是我第一次大规模接触 JMS(除了简单的玩具使用),所以我想知道当前的成语是……正确、愚蠢还是完全错误?
这是当前系统的工作方式。
static QueueConnection connection;
static boolean isConnected;
static void sendSomeMessage(Object sendMe) {
if(!isConnected) connect();
}
static void connect() {
// jndi lookup for connection factory
connection = factory.createQueueConnection();
// lambdas in java pseudo code, woot!
connection.onException => disconnect();
connection.start();
isConnected = true;
}
static void disconnect() {
connection.close()
isConnected = false;
}
其要点是,对于发送的每条消息都反复使用连接,直到发生错误,当发生错误时,连接最终会关闭并重新创建。
我见过的每个示例总是为每条消息创建一个新的连接工厂和一个新的连接,但是这些示例不是大型系统示例,它们是“操作方法”示例中的一个。
保持对 JMS 连接的单个托管引用是可接受的习惯用法,是否应该缓存连接工厂?是否应该为每条新消息重新创建它们?
重用连接工厂但每次都使用新连接对我来说有意义吗?