Skip to content

Options index

A consolidated index of every tunable option across all three public surfaces. The page you reach for when you’re tuning concurrency, retry budgets, payload size, or DLQ depth and need to know what the field is called in each language.

For full prose on each field, follow the link to the canonical reference. Every default below is the value applied when the option is omitted; bold is the default in the cell where it exists.

OptionNodePythonRustControls
Redis URL or host:portconnection.host, connection.port, connection.password, connection.username, connection.dbredis_urlredis_url (passed to connect / Consumer::new)Redis endpoint. Node default 127.0.0.1:6379; Python and Rust default redis://127.0.0.1:6379.
Producer pool size(managed by binding)(managed by binding)ProducerConfig::pool_size (8)Number of connections in the producer pool.
Cluster prefixconnection.prefix (no-op)n/an/aChasquiMQ uses {chasqui:<queue>} Cluster hash tags; there is no tunable prefix.
OptionNodePythonRustControls
In-flight handlers per workerWorkerOptions.concurrency (100)Worker(concurrency=100)ConsumerConfig::concurrency (100)Max parallel handler invocations.
XREADGROUP COUNTWorkerOptions.drainDelay indirectly via block_ms; explicit read_count exposed only on the native ConsumerWorker(read_count=...)ConsumerConfig::batch (64)Stream entries fetched per read.
XREADGROUP BLOCK (ms)WorkerOptions.drainDelay (5000)Worker(read_block_ms=...) (default engine 5000)ConsumerConfig::block_ms (5000)How long the reader blocks waiting for new entries. Higher reduces idle CPU; lower shortens shutdown drain.
CLAIM-recovery threshold (ms)(native ConsumerOpts.claimMinIdleMs)Worker(claim_min_idle_ms=...) (default engine 30_000)ConsumerConfig::claim_min_idle_ms (30_000)Idle time after which XREADGROUP ... CLAIM reclaims an in-flight entry.
Ack flush batch(engine default)(engine default)ConsumerConfig::ack_batch (256)Pipelined XACK size.
Ack flush idle (ms)(engine default)(engine default)ConsumerConfig::ack_idle_ms (5)Max time to wait before flushing a partial ack batch.
Shutdown drain deadline (s)(engine default)(engine default)ConsumerConfig::shutdown_deadline_secs (30)Max time the engine waits for in-flight handlers on shutdown.
OptionNodePythonRustControls
Total attempts (queue-wide)WorkerOptions.maxStalledCount (3)Worker(max_attempts=25)ConsumerConfig::max_attempts (3)Total attempts per job before DLQ.
Total attempts (per job)JobsOptions.attemptsQueue.add(attempts=...)JobRetryOverride::max_attemptsPer-job override of the queue-wide value.
Initial backoff (ms)(set via BackoffSpec.exponential(initialMs))BackoffSpec.exponential(initial_ms)RetryConfig::initial_backoff_ms (100)Base delay for the first retry.
Max backoff (ms)BackoffOptions.maxDelayBackoffSpec(max_delay_ms=...)RetryConfig::max_backoff_ms (30_000)Cap on the computed backoff per attempt.
MultiplierBackoffOptions.multiplier (2 when built via BackoffSpec.exponential)BackoffSpec.exponential(multiplier=2.0)RetryConfig::multiplier (2.0)Exponential growth factor.
Jitter (ms)BackoffOptions.jitterMsBackoffSpec(jitter_ms=...)RetryConfig::jitter_ms (100)Symmetric ±jitter applied per retry.
Backoff strategy (per job)JobsOptions.backoff (number or BackoffOptions)Queue.add(backoff=...)JobRetryOverride::backoff: BackoffSpecOverride the queue-wide curve for this job.
OptionNodePythonRustControls
Persist handler return valuesWorkerOptions.storeResults (false)Worker(store_results=False)ConsumerConfig::store_results (false)When true, the engine writes each non-empty handler return to {chasqui:<queue>}:result:<jobId>.
Result key TTL (ms / s)WorkerOptions.resultTtlMs (3_600_000, rounded up to s)Worker(result_ttl_ms=3_600_000)ConsumerConfig::result_ttl_secs (3600)TTL for stored results.
Result wait timeoutJob.waitForResult({ timeoutMs }) (30_000)Job.wait_for_result(timeout=30.0)(use Producer::get_result directly)Caller-side polling timeout.
Result wait poll intervalJob.waitForResult({ intervalMs }) (100)Job.wait_for_result(poll_interval=0.1)n/aPolling frequency.
OptionNodePythonRustControls
Auto-spawn embedded schedulerWorkerOptions.runScheduler (true)Worker(run_scheduler=True)ConsumerConfig::run_scheduler (true)Whether Consumer::run spawns a Scheduler<T> task.
Scheduler tick interval (ms)WorkerOptions.schedulerTickMs (1000)Worker(scheduler_tick_ms=...) (default engine 1000)SchedulerConfig::tick_interval_ms (1000)How often the leader drains due specs. Lower bound on per-spec fire jitter.
Specs hydrated per tick(engine default)(engine default)SchedulerConfig::batch (256)Max specs materialized per tick.
Scheduler lock TTL (s)(engine default)(engine default)SchedulerConfig::lock_ttl_secs (5)Leader-election lock TTL.
Auto-spawn promoter(engine default)Worker(delayed_enabled=True)ConsumerConfig::delayed_enabled (true)Whether Consumer::run spawns a Promoter task.
Promoter poll interval (ms)(engine default)(engine default)ConsumerConfig::delayed_poll_interval_ms (100)How often the promoter checks the delayed ZSET.
Promote batch(engine default)(engine default)ConsumerConfig::delayed_promote_batch (256)Max promotions per tick.
Promoter lock TTL (s)(engine default)(engine default)ConsumerConfig::delayed_lock_ttl_secs (5)Leader-election lock TTL.
Catch-up policyRepeatOptions.missedFires ({ kind: 'skip' })Queue.add(missed_fires=MissedFiresPolicy.skip())RepeatableSpec::missed_fires (Skip)What to do with windows missed during scheduler downtime.
OptionNodePythonRustControls
DLQ stream MAXLEN ~ cap(engine default)Worker(dlq_max_stream_len=...) (default engine 100_000)ConsumerConfig::dlq_max_stream_len (100_000)Max retained DLQ entries.
DLQ relocator inflight(engine default)(engine default)ConsumerConfig::dlq_inflight (32)Bounded channel size for the DLQ relocator.
Retry relocator inflight(engine default)(engine default)ConsumerConfig::retry_inflight (64)Bounded channel size for the retry relocator.
Oversize-payload threshold (bytes)(engine default)Worker(max_payload_bytes=...) (default engine 1_048_576)ConsumerConfig::max_payload_bytes (1_048_576)Entries above this go straight to the DLQ as OversizePayload.
DLQ peek limitQueue.peekDlq(limit) (20)Queue.peek_dlq(limit=20)Producer::peek_dlq(limit)How many DLQ entries to inspect.
DLQ replay limitQueue.replayDlq(limit) (100)Queue.replay_dlq(limit=100)Producer::replay_dlq(limit)How many DLQ entries to atomically replay.
Unrecoverable signalthrow new UnrecoverableError(...)raise UnrecoverableError(...)Err(HandlerError::unrecoverable(e))Skip retries; route straight to the DLQ.
OptionNodePythonRustControls
Enable events stream(engine default)Worker(events_enabled=True)ConsumerConfig::events_enabled (true)Whether the engine writes to {chasqui:<queue>}:events.
Events stream MAXLEN ~(engine default)(engine default)ConsumerConfig::events_max_stream_len (100_000)Cap on retained events.
MetricsSink implementation(use the native Consumer directly to swap)(use the native Consumer directly to swap)ConsumerConfig::metrics: Arc<dyn MetricsSink> (NoopSink)In-process observability adapter (Prometheus, OpenTelemetry, etc.).
QueueEvents subscriber start idQueueEventsOptions.lastEventId ("$")QueueEvents(last_event_id="$")(build your own with XREAD)Where to start tailing the events stream.
QueueEvents block timeout (ms)QueueEventsOptions.blockingTimeout (10_000)QueueEvents(block_ms=5000)n/aXREAD BLOCK timeout.
OptionNodePythonRustControls
Main stream MAXLEN ~(engine default)Queue(max_stream_len=...) (default engine 1_000_000)ProducerConfig::max_stream_len (1_000_000)Cap on the main stream.
Max scheduling delay (s)(engine default)Queue(max_delay_secs=...) (default engine 2_592_000)ProducerConfig::max_delay_secs (30 days)Reject add_in / add_at whose delay exceeds this.
Job name length (bytes)(256, enforced at FFI)(256, enforced at FFI)MAX_NAME_LEN (256)UTF-8 dispatch name cap.