antirez / disque

Disque is a distributed message broker
BSD 3-Clause "New" or "Revised" License
8.01k stars 538 forks source link

GETJOB from ALL? #198

Open mqudsi opened 7 years ago

mqudsi commented 7 years ago

I have a question regarding the implementation of queues in disque. In particular, does the code allow for an implementation of GETJOB from * or GETJOB from ALL to be written or does this break some fundamental assumptions about the segmentation of nodes or the distribution of queues across nodes?

In particular, this question pertains to the implementation of a blocking means of obtaining one (or more) jobs across all queues without resorting to busy wait. I understand that QSCAN can be used to iterate over all queues and that can be combined with GETJOB NOHANG to in a tight loop to obtain a job across all queues, but that is obviously a waste of system resources.

This is useful if there is no set number of queues beforehand (e.g. a queue can be created by the code rather than being a part of the actual data structuring or partitioning) and queues are used for job management (e.g. flush all jobs of type x where x is simply a named queue) but no distinction is made as to which job should be executed.

Please correct me if I am wrong and this is already possible with the current API, in which case I humbly beg forgiveness for missing this detail.

Thank you.