Skip to main content

Priority Queue (Single Pool)

Pattern Overview​

Explanation​

A queue is usually a first-in, first-out (FIFO) structure, and consumers typically receive messages in the same order that they were posted to the queue. However, some message queues support priority messaging. The application posting a message can assign a priority and the messages in the queue are automatically reordered so that those with a higher priority will be received before those with a lower priority. The figure illustrates a queue with priority messaging.

Figure 1 - Using a queuing mechanism that supports message prioritization

Reference Material​

Priority Queue

Video Explanation

When to Use​

  • The system must handle multiple tasks that have different priorities.
  • Different users or tenants should be served with different priority.

Design Considerations​

General​

Telemetry

Monitor the processing speed on different labels to ensure that the messages in these queues are processed at the expected rates.

Handling Edge Case

Dynamically increase the priority of a queued message as it ages. To ensure it eventually get processed.

API Design​

  • We need to ensure the following methods are available for normal operations

    • dequeue
    • enqueue
    • peek
    • remove
  • We need to provide incoming/outgoing flow rate for different priorities in a configurable sliding time window

  • We should be able to configure the rate and intensity at which old message will be increased in priority

References​

Fastpriorityqueue

Rx.priorityqueue

Possible Future Improvements​

  • Make it compatible for distributed systems possibly through redis.
  • Make the stats available for grafana and prometheus.