我目前正在開發一個產品,該產品有其自己的JMS提供程序,其實現沒有很好的文檔記錄。我必須在Java中準備一個獨立的客戶端應用程序,它將把消息發佈到JMS隊列中。我期待着一個巨大的數據量,因此我正在考慮實現一個JMS連接池和會話池。JMS連接和會話池
在任何對象池中,我們需要確定對象是否健康,然後將其返回給客戶端。 JMS似乎沒有提供「isHealthy()」方法。另外,我無法依賴ExceptionListener,主要是因爲我不確定JMS提供者的實現,而且ExceptionListener的調用也是異步的。我想知道如果在調用onException之前將連接切換到客戶端會發生什麼情況。
作爲解決方案,我計劃使用TCP空閒連接超時。我的理解是,僅當TCP空閒時間連接超時結束或者JMS提供程序關閉時,連接纔會變得不健康。
因此,我打算創建一個池連接包裝器對象,該連接包裝器對象將在創建連接或由客戶端返回到池時存儲「最後使用時間」。在將連接移交給客戶端之前,池將檢查自「上次使用時間」以來的時間間隔是否少於3分鐘(假設默認TCP空閒連接超時爲5分鐘)。
我的理解和實現是否正確?