Overview
The Ordered Service is required by the Ordered Routing Queue Strategy. A function defined in APL code will extract values from any routed UDR or bytearray to decide which partition queue to add it to.
...
If there are session updates from a collection point that are encoded to a user defined UDR type Ordered.Subscriber.Update
with the field 'id
' containing a session id, the following example shows how the values are read and added to the ordered.SessionIdentifier
that the queue strategy will use to hash and select a partition based on.
Code Block |
---|
import ultra.Ordered.Subscriber;
void route(ordered.SessionIdentifier si, any input) {
if(instanceOf(input, Update)) {
Update u = (Update)input;
ordered.addInteger(si, u.id);
}
} |
Multiple values can be added to the SessionIdentifier
, it will calculate the hash based on them all after the route function returns. If there is more than one type routed into the workflow, there needs to be a longer if-else chain, with a clause for each type.
Function | Description |
---|---|
ordered.addInteger(ordered.SessionIdentifier si, int i) | Add the value of integer i to the |
ordered.addString(ordered.SessionIdentifier si, string s) | Add the value of string s to the |
ordered.addByte(ordered.SessionIdentifier si, byte b) | Add the value of byte b to the |
ordered.addBytes(ordered.SessionIdentifier si, bytearray ba) | Add the value of bytearray ba to the |
ordered.addByteRange(ordered.SessionIdentifier si, bytearray bs, int offset, int len) | Add the values of bytearray ba from offset and the next len bytes to the |
ordered.setPartition(ordered.SessionIdentifier si, int partition) | Alternatively, if more control over partition selection is wanted one can set the partition id explicitly, this will override any values added to the |