-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Hi, I wanted to open a discussion on the mertis, drawbacks, and technical implications of adding a Queue system on a route level.
As an example, the route has some additional config on API creation:
...,
"queue": {
"concurrency": 20,
"retries": 3, // 0 is try only once, -1 is try indefinitely
"retryDelay": 60000, // delay between each attempt in milliseconds,
}
...
And then when a request is verified and routed, instead of immediately being passed to the registered endpoint is put into a Queue to be attempted and retried.
Retry behavior can be based on either the status of the request (non-2xx indicates a retry) or on a response header (x-annon-retry = 1 or 0)
It would require a single Queue provider such as RabbitMQ (may require 'delayed-message' exchange plugin) or Redis - perhaps something like Honeydew would be a satisfactory dependency.
Benefits of queueing requests:
- Routes have an inherent rate limit (at least per-worker) determined by the queue concurrency
- Route implemntors can simplify their own logic - rather than implemnting their own queues or retry behavior they can "just fail" in the knowledge that the request will be retried.
- Route load should be more stable in bursty traffic
I'm wondering if an intermediary like this is supported/supportable by the existing plugin system. If so, I'm happy to work on it, as it's the only thing stopping me from using Annon currently!