我有一個服務從多個客戶端獲取請求,並在某些處理向客戶端發送響應之後。我使用ThreadPoolExecutor(threadExecuterClient)來處理客戶端請求,並將它們放在BlockingQueue(requestQueue)中。許多客戶端可以發送併發請求。我有另一個ThreadPoolExecutor(threadExecuterServer)處理requestQueue中的請求。這個處理過程基本上是把這個請求發送到服務器並得到響應。處理完成後,我需要將該響應發送給發出請求的客戶端。我很難跟蹤哪個客戶提出了哪個請求。我基本上需要找到一種方法將客戶端請求映射到處理結果。該服務將像一個網關。Java對許多線程的許多線程關係
任何想法來處理這個問題表示讚賞。
謝謝
您可以在每個請求中附加客戶端ID,並且該請求會像threadExecuterServer一樣接收。在執行請求時,請求可以被分割以獲取客戶端做出的實際請求..並且在處理請求之後將客戶端ID重新附加到響應代碼中。IMO – 2013-03-05 17:40:43
抱歉,您正在尋找一種跟蹤工作的方式?一個簡單的記錄器說明每個執行的處理(請求接受,通過網關處理,響應發送)的請求ID是不夠的? – devlearn 2013-03-05 17:42:23
@VishalK我的第一個直覺就像你的直覺。但是,僅通過附加ID來處理請求就太複雜了。服務器線程始終處於活動狀態,並且它們可以發送請求,因爲隊列中有更多的請求,而無需等待先前請求的響應。對於客戶端線程,每個連接創建一個線程,客戶端可以使用相同的連接發送多個請求,直到客戶端關閉連接。對於最後一部分,我不確定一個連接是否適合多個請求。我可以爲每個請求使用一個唯一的連接。 – celik 2013-03-05 18:31:31