Scope
- How to sort a number of orders that have been added to a job chain and to force serialized processing in a predefined order?
- The solution outline includes a job that is added to the top of the job chain and that would
- suspend all incoming orders until a predefined idle timeout is reached and no more orders are expected
- sort the orders and reinsert them to the next job node in the job chain.
- Reference: https://sourceforge.net/p/jobscheduler/discussion/486122/thread/a66295bb/
Solution
- Download sort_orders.zip
- Extract the archive to any folder within the
./config/live
folder of your JobScheduler installation. - The archive will extract the files included to a folder
sort_orders.
- You can store the sample files to a different folder, the solution does not make use of specific folder names.
Pattern
Implementation
Components
- The solution implements a job
sorter
that can be added to the top of any job chain.- This job implements a
spooler_process()
function that suspends all incoming orders. - This job is configured for one task and with an idle timeout attribute, i.e. it executes incoming orders sequentually.
- After the last order this job waits for the duration specified with the
idle_timeout
attribute for new orders.- The idle timeout is configured by
<job idle_timeout="10">
with thesorter
job definition. - With the idle timeout being expired this job will execute its
spooler_exit()
function and will sort all orders that have previously been suspended.- Sorting is done in alphabetical order.
- The orders are reinserted to the next job node that follows the
sorter
job in the job chain.
- The idle timeout is configured by
- This job implements a
- The sample included makes use of a job chain
job_chain1
that includes the job nodes for thesorter
job and ahello
job.
Usage
- Add two orders to the
job_chain1
job chain.- Use an order id in descending alphabetical order, e.g. "cba" for the order id of the first order and "abc" for the order id of the second order.
- Both orders will be suspended in the first node of the job chain.
- After 10s both orders are reinserted to the next job node in the job chain.
- This time the orders are processed in ascending alphabetical order.