Sitecore有一个很好的event queueing system,它持久存储在数据库中。 您还可以define custom events。
我现在需要能够在处理之前提出一个延迟的事件。这可能吗?
我可以使用其他一些排队系统(ApacheMQ?),但如果可能的话,最好使用内置的Sitecore系统。
答案 0 :(得分:3)
据我所知,不可能直接延迟事件。但是有一种方法可以延迟执行您想要执行的自定义代码。
您可以创建自定义事件。在自定义事件处理程序中,使用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);
您也可以使用此方法在CD服务器上使用远程事件从CMS服务器触发方法后延迟执行方法。
有关Sitecore作业的详细信息,另请参阅this link。
答案 1 :(得分:1)
为了澄清一点,尽管Sitecore有各种与内容编辑和发布相关的事件模型,以及页面生命周期内的管道事件,但是说“Sitecore有一个持久存储到数据库的事件排队系统”是错误的。 ”
内容编辑器事件背后的想法是它们按特定顺序和顺序发生,因此“延迟”事件将是一个奇怪的想法是不可能的。您可以在sitecore中定义计划任务(查看/sitecore/system/Tasks
下)。也许你可以创建一个自定义事件,它可以创建或修改一个sitecore项来保存一些任务信息(如果你愿意,可以称之为'队列'),然后创建一个自定义任务(计划以预定义的间隔运行),这将从这个队列并处理它们。