Purpose
Handle background response processing. Queue, workers, timeout, cancellation, polling.
Behavior
- Queue: bounded channel (capacity 100)
- Workers: 10 long-lived tokio tasks pulling from queue
- Per-request timeout: 5 minutes
- On enqueue:
- Store response with
status=queued in response store
- Return immediately with queued response object
- Worker picks up, runs full filter chain, updates store
- Handle
QueueFull → reject (ensure no orphaned queued responses in storage)
- Cancellation:
- Fetch response, check status
- If
queued: update to cancelled
- If
in_progress: cancel tokio task + update to cancelled
- If already terminal: conflict error
- Idempotent for already-cancelled
- Polling: clients GET the response to check status
- HTTP handler:
POST /v1/responses/{id}/cancel
Config
filter: background_jobs
queue_size: 100
num_workers: 10
timeout_seconds: 300
Praxis trait methods
on_request — if background=true, enqueue and return immediately with queued response
- Separate: worker loop that processes queued requests through the full filter chain
Dependencies
- Response store
- Tokio runtime
Reference
Purpose
Handle background response processing. Queue, workers, timeout, cancellation, polling.
Behavior
status=queuedin response storeQueueFull→ reject (ensure no orphaned queued responses in storage)queued: update tocancelledin_progress: cancel tokio task + update tocancelledPOST /v1/responses/{id}/cancelConfig
Praxis trait methods
on_request— ifbackground=true, enqueue and return immediately with queued responseDependencies
Reference