2011-07-19 45 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

相关问题