2008-11-07 25 views
7

是否保持JMS連接/會話/消費者總是打開一個不好的做法?長期存在的JMS會話。保持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(); 

任何建議,以提高JMS使用的這種模式?

回答

4

這是處理長壽命連接時的一種非常常見和可接受的做法。對於許多JMS服務器來說,實際上最好是每次需要時創建一個新連接。

4

在我們的應用程序中,我們將連接/會話/消費者/生產者一次開放數月。我們必須與我們的供應商(BEA)合作才能可靠地開展工作。但任何麻煩都是供應商需要修復的錯誤。

+0

+1用於分享實際部署的經驗。 – 2014-02-11 11:53:00

5

保持連接/會話/生產者/消費者選擇保持長時間還是不應該基於生產者/消費者發送/接收消息的頻率。

如果生產者發送消息或者消費者頻繁接收消息,那麼連接/會話/生產者/消費者應該保持打開狀態。另一方面,如果消息發送/接收不頻繁,那麼保持這些JMS對象打開會消耗系統資源(如套接字)並不好。

0

僅供參考,不需要關閉關閉連接的會話,生產者和消費者(javax.jms.Connection)。 下面的代碼應該足以釋放資源:

try { 
     this.connection.close(); 
    } catch (JMSException e) { 
     // 
    }