Sitecore 有一个很好的事件队列系统,它被持久化到数据库中。您还可以定义自定义事件。
我现在需要能够引发一个在处理之前有延迟的事件。这可能吗?
我可以使用其他一些排队系统(ApacheMQ?),但如果可能的话,最好使用内置的 Sitecore 系统。
据我所知,不可能直接延迟事件。但是有一种方法可以延迟执行您想要的自定义代码。
您创建自定义事件。在自定义事件处理程序中,使用 Sitecore JobManager 执行您希望延迟启动的特定方法。通过使用 Sitecore JobManager,您可以通过传递附加参数“InitialDelay”来延迟方法的执行。
var options = new JobOptions("JobName", "category", "Sitename", "Object Instance
which contains the method to execute", "Methodname")
{ InitialDelay = TimeSpan.FromMinutes(5.0) };
JobManager.Start(options);
在使用远程事件从 CMS 服务器触发方法后,您还可以使用它在 CD 服务器上延迟执行方法。
有关 Sitecore 工作的更多信息,另请参阅此链接。
澄清一点,尽管 Sitecore 有各种与内容编辑和发布相关的事件模型,以及页面生命周期内的管道事件,但说“Sitecore 有一个持久化到数据库的事件队列系统”是错误的。
内容编辑器事件背后的想法是它们以特定的顺序和顺序发生,因此“延迟”事件将是一个奇怪的想法,不可能。您可以在 sitecore 中定义计划任务(在 下查看/sitecore/system/Tasks
)。也许您可以创建一个自定义事件,该事件可以创建或修改一个站点核心项目以保存一些任务信息(如果您愿意,可以将其称为您的“队列”),然后创建一个自定义任务(计划以预定义的时间间隔运行),该任务将从这个队列并处理它们。