2017-02-27 120 views
0

我目前正在開發一個產品,該產品有其自己的JMS提供程序,其實現沒有很好的文檔記錄。我必須在Java中準備一個獨立的客戶端應用程序,它將把消息發佈到JMS隊列中。我期待着一個巨大的數據量,因此我正在考慮實現一個JMS連接池和會話池。JMS連接和會話池

在任何對象池中,我們需要確定對象是否健康,然後將其返回給客戶端。 JMS似乎沒有提供「isHealthy()」方法。另外,我無法依賴ExceptionListener,主要是因爲我不確定JMS提供者的實現,而且ExceptionListener的調用也是異步的。我想知道如果在調用onException之前將連接切換到客戶端會發生什麼情況。

作爲解決方案,我計劃使用TCP空閒連接超時。我的理解是,僅當TCP空閒時間連接超時結束或者JMS提供程序關閉時,連接纔會變得不健康。

因此,我打算創建一個池連接包裝器對象,該連接包裝器對象將在創建連接或由客戶端返回到池時存儲「最後使用時間」。在將連接移交給客戶端之前,池將檢查自「上次使用時間」以來的時間間隔是否少於3分鐘(假設默認TCP空閒連接超時爲5分鐘)。

我的理解和實現是否正確?

回答

2

這裏是我會做什麼:

如果這樣做失敗,那麼我的連接就死定了。然後GenericObjectPool會自動調用工廠來創建一個全新的連接(#makeObject)來替換死掉的連接。