How to delay events?#
Delaying Uni’s item#
When you have a
Uni, you can delay the item emission using
You pass a duration. When the item is received, it waits for that duration before propagating it to the downstream consumer.
You can also delay the item’s emission based on another companion
The item is propagated downstream when the
Uni returned by the function emits an item (possibly
If the function emits a failure (or throws an exception), this failure is propagated downstream.
Throttling a Multi#
Multi does not have a delayIt operator because applying the same delay to all items is rarely what you want to do.
However, there are several ways to apply a delay in a
First, you can use the
onItem().call(), which delays the emission until the
Uni produced the
call emits an item.
For example, the following snippet delays all the items by 10 ms:
In general, you don’t want to apply the same delay to all the items.
You can combine
call with a random delay as follows:
Finally, you may want to throttle the items.
For example, you can introduce a (minimum) one-second delay between each item.
To achieve this, combine
Multi.createFrom().ticks() and the multi to throttled:
onOverflow().drop() is used to avoid the ticks to fail if the other stream (
multi) is too slow.
Delaying other types of events#
We have looked at how to delay items, but you may need to delay other events, such as subscription or failure.
For these, use the
call approach, and return a
Uni that delay the event’s propagation.