Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

By default Blueriq uses the basic scheduler for evaluating tasks and priorities. The evaluating is executed according to the configuration of the blueriq.timer.interval. This can be set to hourly (default) or each minute. Each time the interval expires the process engine starts evaluating all projects present on the Runtime that uses the Process Engine. Per project all the cases are retrieved that contain timer tasks, automatic tasks, tasks with a expiration date or Priority Algorithms. When there is a matchthe evaluation leads to a match (meaning when the current time matches the proposed execution time), the task are executed. 

...

The transactional boundary of the evaluation and execution done by the basic scheduler is a project. As a result, per project all cases are evaluated and all the tasks are executed the moment the timer interval expires. This will increase CPU and memory consumption. Also if something went wrong with executing one of the tasks within a project, the transaction will be rolled back (eq. case A has 5 timers tasks, if one of the timer tasks fails, all the other timer tasks will not be executed). Due to the fact that the advanced scheduler evaluates and executes each task individually, it has no impact on the other tasks when this task fails. Also, in a multi-node environment each task will be picked up one-by-one by one of the nodes, no peak load will occur.

On a business level there is another consideration to be made to switch to the advanced scheduler. When a project contains a lot of cases with tasks that will be matched in when the timer expires, evaluating this project could take a long time. If this evaluation takes more than the value of the blueriq.timer.interval, the next interval will expire again which will start evaluating the same tasks again. Eventually this will lead to unexpected behaviour and performance loss. 

The same consideration holds for cases with many tasks that will be executed in the future. These tasks are constantly evaluated but will be skipped (because they don't match) .