2011-07-19 80 views
5

是否有使用NServiceBus安排任務的優雅方式?有一種方法,我發現,而searching the net。 NServiceBus是否提供內部API用於調度。如何使用NServiceBus安排每天運行的任務

+0

我們使用這種方法,它運作良好。你在做什麼樣的處理?你可能需要一個傳奇。 –

+0

我正在嘗試使用相同的方法。但是我無法弄清楚如何在調度程序的實現中獲得總線的參考。 – frictionlesspulley

+1

有趣我有同樣的問題。我最終明確要求容器提供總線實例:IBus總線= Configure.Instance.Builder.Build ();.如果這回答了這個問題,我會編輯併發布答案。 –

回答

8

NServiceBus現已此建在

從這裏http://docs.particular.net/nservicebus/scheduling-with-nservicebus

public class ScheduleStartUpTasks : IWantToRunWhenTheBusStarts 
{ 
    public void Run() 
    { 
     Schedule.Every(TimeSpan.FromMinutes(5)).Action(() => 
      Console.WriteLine("Another 5 minutes have elapsed.")); 

     Schedule.Every(TimeSpan.FromMinutes(3)).Action(
          "MyTaskName",() => 
          { 
           Console.WriteLine("This will be logged under MyTaskName’."); 
          }); 
    } 
} 

注意警告

當不使用它。你可以把一個計劃任務看作是一個簡單的從未 結局傳奇。但只要你的任務開始獲得邏輯 (if-/switch-statements),你應該考慮轉向一個傳奇。

+0

哇!感謝這篇文章 – frictionlesspulley

+0

這對我來說......反正有一段時間了。然後有一天它在生產中失敗了,即使公交的其他部分繼續工作,調度程序仍然停留了2天。它沒有記錄任何NSB錯誤消息。所以現在我正在尋找使用Quartz.NET來代替。顯然這是一個已知的問題... http://stackoverflow.com/q/23732174/61697 – demoncodemonkey

+0

@demoncodemonkey已修復的已知問題https://github.com/Particular/NServiceBus/issues/2133。但石英。NET是一個完全有效的替代方案 – Simon

3

注意:此答案對NServiceBus 2.0版有效,但不再正確。版本3具有此功能。去閱讀西蒙的回答,它對於版本3是有效的!

NServiceBus沒有內置調度系統。它(在一個非常簡單的層面上)是一個消息處理器。

您可以創建一個實現IWantToRunAtStartup(Run和Stop方法)的類,然後創建一個計時器或執行任何需要在特定時間將消息放入總線的邏輯。

其他人已經使用Quartz.NET與NServiceBus一起獲得更多的粒度調度功能。

+0

我使用Quartz來調度其他服務,直到我們開始使用NServiceBus進行消息傳遞。這是我第一次在我們的Quartz調度器失效後需要安排一些東西。 – frictionlesspulley

+2

我使用Quartz來每小時觸發一個工作,並且該工作剛剛發佈了一個事件...該服務使用了IWantToRunAtStartup中的Run&Stop方法..這是一個很好的開始http://stuartcullinan.blogspot.com/2010/12 /building-nservicebus-timeout-manager.html,順便說一句,檢查出[NServiceBusContrib](https://github.com/nservicebus/nservicebus-contrib) – Sarmaad

+0

請注意此答案不再正確 – Simon

相關問題