2014-11-24 57 views
2

我已經通過這個騾子線程檔案的poolExhaustedAction - RUN

了我身邊有RUN poolExhaustedAction一些混亂。

如果poolExhaustedAction設置爲RUN並且池中沒有可用的線程,請求接收方線程是否會繼續流?如果是這樣,這是一個同步處理?

編輯:假設我有像騾流配置:

  • 流處理策略是異步的。
  • ReceiverFlowDispatcher線程池大小爲1
  • 最後的ReceiverpoolExhaustedActionDispatcherRUN

    通過上面提到的配置,我的問題如下所示:想象Flow線程池已用盡,並且來自Receiver池的(僅一個)線程接收到來自客戶端的新請求。這個接收器線程會繼續進行流程處理還是等待?如果我理解正確,接收線程不會等待,因爲其poolExhaustedAction設置爲RUN。那麼這不是一個同步處理形式的接收線程的角度?那麼設置asynchronous的處理策略有什麼用?

現在我已經改變了上述結構,使得Dispatcher'spoolExhaustedAction設置爲WAIT。上述接收者線程是否等待調度程序線程?我不這麼認爲。

請澄清我的疑問。提前致謝。

回答

2

請參閱以下鏈接,我已經介紹了WAIT和RUN poolExhaustedAction值。

Mule Exhausted Action RUN vs WAIT. Which one to choose and when

對於你的問題來運行的相關。

在異步處理streategy的情況下,是的。當流程線程耗盡時,請求接收器線程繼續處理請求。但這不是同步的。因爲如果有4個接收者線程,所有4個接收者線程可能會繼續處理請求。他們都可能會平行運行。

回答爲編輯的OP: 由於只有一個線程正在執行,處理並不意味着同步。如前所述,Receiver線程僅在流線程池耗盡後才啓動。意味着流程線程在處理中都處於繁忙狀態,在這種情況下,一個線程仍在處理中,並且不能接受新的處理請求。所以接收線程開始處理。所以這仍然不是同步的。

希望這回答你的問題。

+0

@ user1760178,謝謝你的解釋。我仍然感到困惑,假設我這樣配置了:流線程池大小爲1,接收者線程池大小爲1,處理策略爲異步。現在想象一下,流線程池已經耗盡。如果流線程poolExhaustedAction爲'RUN',接收者線程是否繼續處理流?如果是這樣,從接收線程的角度來看,處理看起來是同步的嗎? – 2014-11-24 18:23:36

+1

情況並非如此。即使你說只有一個接收者線程存在。只有在所有流線程仍在處理的情況下,接收線程纔開始處理。這意味着接收者線程不是該流程中請求處理過程中唯一的線程。並且對於同步,可以在任何時間點在流中處理theread,並且它應該是唯一可以處理該流的請求的線程。即使線程不併發,也不會有兩個線程用於同步流。 – user1760178 2014-11-24 19:56:38

+0

你能否看到問題的編輯部分,並提供澄清? – 2014-11-25 02:03:10