如何创建将在MarkLogic中每秒运行一次的计划任务?

时间:2014-11-15 15:19:58

标签: scheduled-tasks xquery marklogic

MarkLogic计划任务无法配置为以不到一分钟的间隔运行。

有没有办法以 1秒的间隔执行XQuery模块?

注意: 考虑到Task Server已完全加载的情况,我需要确保第二次调度的任务在需要时获取Task Server线程。

如果MarkLogic中有任何可用于实现此目的的内容,请与我们联系。

1 个答案:

答案 0 :(得分:2)

想要快速计划任务可能暗示设计需要重新思考。

即使每分钟运行一次任务也有风险,需要仔细考虑管理重叠任务和失控任务的可能性。如果应用程序设计要求计划任务每​​秒运行一次,我会提出这是一个潜在的严重问题。备份几个步骤,如有必要,请提出一个关于导致查看计划任务的更高级别问题的新问题。

有一个关于管理任务队列优先级的子问题。任务优先级可以处理其中的一些。有两个优先事项:正常和更高。 Task Server首先清空优先级较高的队列,然后清空正常队列。但是每个队列仍然是一个简单的队列,并且在生成任务后无法更改优先级。因此,如果您始终使用priority=higher对任务进行排队,那么它们将全部位于优先级较高的队列中,并且它们将按顺序运行。您可以使用server fields as signals to already-running tasks等技术玩一些游戏。但是想要重新排序队列中的任务可能是设计需要重新思考的另一个暗示。

如果在仔细考虑了所有的陷阱和危险后,我决定我需要一种快速的任务......我可能会使用外部请求。选择任何脚本语言,并将带有HTTP请求的简单while循环写入MarkLogic群集。即便如此,花一些时间考虑重叠请求和锁定。如果请求在客户端超时,会发生什么?它会继续在服务器上运行吗?这会导致请求重叠并需要死锁解决吗?它会导致资源消耗失控吗?

避免使用xdmp:sleep的任何想法。这将在睡眠期间占用Task Server线程,然后您将遇到两个问题。