我正在写一个需要在特定时间运行任务的应用程序,所以我计划使用Quartz.NET。然而,需要运行的任务有多个步骤,其中一些步骤可能会有点密集,所以我在考虑使用MSMQ之类的东西来对任务的每个部分进行排队,并使用较小的专注于分散负载的子任务,而不是一个位任务。
这样做的唯一问题是,它会绕过Quartz.NET失败任务特性,我想用它来确保任务完成。
有没有人能建议一种单独使用Quartz.NET来做任何事情的方法?或者如何在使用MSMQ的同时,仍然能够使用Quartz.NET的“任务失败”功能?(或者其他我可能不知道的方式?)
发布于 2011-03-16 07:01:33
这听起来很像建立在MSMQ之上的NServiceBus内部的传奇概念。您将工作分派到节点,然后节点返回它们的工作(或失败)。然后,这个传奇协调下一步应该发生的任务。
http://docs.particular.net/nservicebus/sagas/
将NServiceBus用于此目的的主要原因之一是,它为您抽象了许多基础设施,并使您专注于业务行为以及与该行为相对应的事件。
发布于 2011-03-18 06:52:46
您可以从Quartz.Net任务中计划其他任务。这将使您能够对所有子选项卡使用任务失败功能,但您不能将此功能应用于主任务。这本质上提供了您想要实现的相同功能,而不必使用MSMQ。
发布于 2012-11-05 06:08:48
这个问题只指定分散工作负载是可取的,而不是在异步调用中将控制移交给另一个任务/进程/消息处理程序。
在这种情况下,Quartz作业可能会将“任务”消息推送到MSMQ上,以便其他一些服务拾取。然后,它可以在退出Execute方法之前等待另一个队列上的“响应”消息。它可以通过轮询队列来做到这一点。一旦它收到了成功或失败的消息,它就可以直接退出Execute方法,或者抛出JobExecutionException。
这个解决方案并不是很优雅。请求/响应机制和传输可以被抽象出来,例如通过WCF或NServiceBus,但是你隐含地追求的基本上是双工通信的事实意味着它不太适合MSMQ。不过,这是可能的(参见http://www.codeproject.com/Articles/41907/WCF-Duplex-MSMQ或http://docs.particular.net/samples/fullduplex/)。您可能会更好地使用某种类型的一系列web服务,异步地调用它们并等待所有的完成。
https://stackoverflow.com/questions/5318181
复制相似问题