我正在致力於通過TIBCO EMS提供請求/響應服務的服務器端項目,並且正在尋找關於歸檔可伸縮性以及此服務中的低延遲的最佳實踐的建議。我在.NET上這樣做,但是由於TIBCO EMS被認爲實現了JMS規範,我認爲其他JMS實現和平臺(Java)的建議是相關的。在TIBCO EMS(或其他JMS)中,如何創建可擴展的請求/響應處理器?
當前,我們正在使用一個Connection,一個Session,一個Consumer並在該單個Consumer上使用回調來收聽消息。每個請求在回調線程上進行處理,同時在不同的隊列(但同一會話)上進行回覆。這可行,但看起來並沒有擴展 - 即使在高事務處理速度下,CPU負載也可以忽略不計,但請求延遲不斷增長。
我假設EMS正在爲回調使用單個線程,並且處理時間以及發送回覆所需的時間因此阻止了其他請求被處理,但是 - 什麼是最好的方式讓這個規模?
一種方法是立即安排一旦接收到線程池上的傳入請求的實際處理。這是一個快速解決方案,可以擴展,但會引入額外的延遲,並會在會話使用期間引入線程問題。另一個會有一些會話對象,甚至連接對象?任何人都可以請這樣做的最佳做法建議,我想它一定是在那裏更常見的使用模式之一...
如果我使用的客戶端確認模式,我可以使用多個線程來處理消息,並在每個線程上承認處理的消息? –