2015-09-15 80 views
0

我有一個NserviceBus命令的處理程序,在它的處理程序中,我們有一個讀取xml的過程,但這需要時間。所以現在發生的事情是xml被讀取的時間,命令處理程序再次啓動,它觸發了我配置爲最大重試次數的次數,5在這種情況下。NServiceBus命令處理程序一次又一次地觸發

這是一些代碼: -

class SendHandler : 
    IHandleMessages<SendCommand> 
{ 
public SendHandler() 
    { 
     ------some code 
    } 


    public void Handle(SendCommand message) 
    { *1 
      -----there is some code which is taking time 
      -----the line number (*1) is fired again and again by the time processing takes place 
} 

請幫助。

+0

你確定另一條消息沒有被髮送和處理嗎? –

+0

處理郵件需要多少時間,以及您使用什麼傳輸? –

+0

@phil還有一個消息從這個處理程序發送,並且正在某處處理。 – King

回答

2

檢查您的第一和第二級的重試設置(FLR/SLR 作爲意見建議,嘗試在隊列中的一個命令消息。 如果處理不與XML處理完成後,檢查它是否超過默認transaction timeout。如果是這樣的,回顧一下你使用處理器的方法,因爲你可能需要一個很長的(er)運行進程。

+0

如果他正在使用天藍色的運輸工具,他也可能會遇到peeklock超時,默認大約30秒。特別是如何處理在事務超時期間無法處理的更長時間運行的進程時,還會提供一些指導。除非文檔已經更新,否則我知道它會幫助我們開始。 –

+0

@ChadRuppert好點。 LockDuration時間可以延長至5分鐘。除此之外,人們應該真正考慮改變代碼方法。如果這是一個漫長的過程,那麼可以使用Sagas。如果它不是一個長時間運行的過程,但需要很長的處理時間,一個單獨的線程。 –

+0

或者,有什麼方法可以改變特定命令的總線配置。像在app.config中設置的配置是''..我想通過代碼覆蓋這個app.config的特定情況。任何幫助...! – King

0

據我所知,你不能在消息級別指定FLR/SLR設置,它們只能是如果端點處理不同的消息,最好根據消息SLA對它們進行分組,因此,將消息類型與不同的SLA分開到不同的端點,您可以發佈您的用例在Google羣組中:https://groups.google.com/forum/#!forum/particularsoftware,我們可以在?謝謝。