In certain scenarios it may be desirable to deliver messages with differing levels of priority over the same channel or queue. Universal Messaging provides the ability to expedite messages based on a priority level. Messages with higher levels of priority are able to be delivered to clients ahead of lower priority messages. The priority is a numeric value in the range 0 (lowest priority) to 9 (highest priority).
Universal Messaging achieves this capability through a highly concurrent and scalable implementation of a priority queue. Where in a typical queue events are first in first out, in a priority queue the message with the highest priority is the first element to be removed from the queue. In Universal Messaging each client has its own priority queue for message delivery.
The following code snippet demonstrates how to set priority on a message:
Priority Messaging allows for a high priority message to be delivered ahead of a backlog of lower priority messages. Ordering of delivery is done dynamically on a per client basis.
Priority messaging is enabled by default, there are no configuration options for this feature.
As Priority Messaging is done dynamically, events may not appear in strict order of priority. Higher priority events are expedited on a best effort basis, and the effects become more noticeable as load increases.
If events are stored for replay at a later stage, for example for a durable subscriber who is currently not consuming events, higher priority events will be delivered earlier than lower priority events when the durable subscriber starts consuming the events, even if the lower priority events were created much earlier .