2

我正在编写一个需要在特定时刻运行任务的应用程序,因此我计划为此使用 Quartz.NET。需要运行的任务有多个步骤,其中一些可能有点密集,所以我正在考虑使用 MSMQ 之类的东西来排队任务的每个部分,并有更小的集中子任务来分散负载,而不是一项任务。

唯一的问题是,它会绕过我想用来确保任务完成的 Quartz.NET 失败任务功能。

任何人都可以建议一种单独使用 Quartz.NET 来做所有事情的方法吗?或者如何同时使用 MSMQ,并且仍然能够使用 Quartz.NET “任务失败”功能?(或任何其他我可能不知道的方式?)

4

3 回答 3

1

这听起来很像构建在 MSMQ 之上的 NServiceBus 中的传奇概念。您将工作分派给节点,它们会以他们的工作(或失败)作为回应。传奇然后协调接下来应该发生的任务。

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

为此使用 NServiceBus 的主要原因之一是它为您抽象了许多基础架构,并且让您专注于业务行为以及与该行为相对应的事件。

于 2011-03-15T23:01:32.997 回答
0

该问题仅指定分散工作负载是可取的,而不是将异步调用中的控制权移交给另一个任务/进程/消息处理程序。

在这种情况下,Quartz 作业可以将“任务”消息推送到 MSMQ 以供其他一些服务接收。Execute然后它可以在退出该方法之前等待另一个队列上的“响应”消息。它可以通过轮询该队列来做到这一点。一旦它收到成功或失败消息,它就可以Execute干净地退出该方法或通过抛出JobExecutionException.

这个解决方案不太优雅。请求/响应机制和传输可以被抽象出来,例如通过 WCF 或 NServiceBus,但是您隐含地追求基本上是双工通信的事实意味着它不太适合 MSMQ。这是可能的(见http://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQhttp://docs.particular.net/samples/fullduplex/)。您可能会更好地使用某种类型的一系列 Web 服务,异步调用它们并等待所有完成。

于 2012-11-04T22:08:48.120 回答
0

您可以从 Quartz.Net 任务中安排其他任务。这将使您能够对所有子选项卡使用任务失败功能,但您无法将其应用于主任务。这实质上提供了您想要实现的相同功能,而无需使用 MSMQ。

于 2011-03-17T22:52:45.893 回答