2016-07-21 31 views
0

在使用NServiceBus調度程序時,我觸發委託定義失敗。我在下面的鏈接中使用了文檔來設置EndpointScheduler類。NServiceBus 5.2.14 - 調度程序無法觸發委託

創建端點對應的超時隊列,並且消息成功進入隊列。在執行過程中不會遇到錯誤,但調度程序不會觸發委託。我目前使用NServiceBus 5.2.14,類似的測試使用NServiceBus 3.2.7。任何想法爲什麼調度程序不會觸發委託?

http://docs.particular.net/nservicebus/scheduling/

public class EndpointScheduler : IWantToRunWhenBusStartsAndStops, ILoggable 
{ 
    public EndpointScheduler(Schedule schedule) 
    { 
     this.schedule = schedule; 
    } 
    public void Start() 
    { 
     schedule.Every(
      TimeSpan.FromMinutes(1), 
      "Test", 
      () => 
      { 
       Debug.WriteLine("I'm testing the scheduler"); 
      } 
     ); 
    }   
    public void Stop() 
    { 
    } 
} 
+1

好吧,不幸的是它只是在我的機器上工作。 Debug.WriteLine不會輸出到控制檯,但會顯示在Visual Studio輸出窗口中。 Console.WriteLine適用於控制檯。我還會在任務之前和之後看到記錄的INFO消息,並且可以在它上面找到一個斷點。我假設你的例子缺少一個私有'schedule' var,否則它不會編譯。什麼是ILoggable,因爲這不是來自NSB。這有什麼關係嗎?否則,請顯示您的端點配置代碼。確定TimeoutManager和TimeoutManagerBasedDeferral功能已啓用? –

+0

@DavidBoike這完全是由我造成的。我的EndpointConfig有這個配置DisableFeature (); 刪除它糾正了我的錯誤。感謝您看看這個! – Pietro

回答

1

感謝@DavidBoike您指出一些潛在的設置問題。

端點配置包含:

configuration.DisableFeature<TimeoutManager>() 

卸下來修正它我遇到的問題。

原因是調度程序依賴於TimeoutManager。它的工作原理是推遲一條消息以便稍後處理(使用TimeoutManager),並在收到該消息時調用委託。沒有激活TimeoutManager,這是行不通的。