tarantool/queue
PHP bindings for the Tarantool Queue LuaRock, letting you produce and consume tasks in Tarantool tubes with FIFO, TTL, and other queue types. Covers producer and consumer APIs, statistics, and custom methods.
Assessment refreshed for tarantool/queue v0.11.0 (prior baseline: v0.10.0).
tarantool/queue package remains an asynchronous task processing library backed by Tarantool (in-memory, persistent, replicated). It still fits architectures requiring:
subqueuettl make tenant-, priority-, or time-bucketed queues a first-class primitive with automatic expiry — previously this required hand-written Lua schema work and our own cleanup jobs.Queue::put() returning null when full introduces a native backpressure signal, which the package did not previously expose.queue:work integration.put()'s nullable return converts a deliberate backpressure mechanism into silent job loss.Illuminate\Contracts\Queue\Queue) or direct API usage bypassing Laravel queues.tarantool/client ^0.11 (supersedes the previously referenced tarantool/tarantool-php client). Client and queue library must now be upgraded in lockstep — this is a new co-dependency constraint.serialize() handling for complex payloads; the escape hatch for arbitrary payloads still exists and must be governed.put() returning null means "not enqueued." Any driver wrapper must map this to Laravel's push() false so callers can branch, and any caller that treats a job handle as guaranteed will break at runtime rather than at compile time.| Risk Area | Assessment | Mitigation Strategy |
|---|---|---|
| PHP 8.2+ requirement | Blocks adoption on Laravel 10 / PHP 8.1 estates; creates a split-version estate during rollout. | Sequence the runtime upgrade first; pin v0.10.x where blocked; track 8.1 hosts to zero. |
Client co-dependency (^0.11) |
Queue and client must move together; client itself may carry its own breaking changes. | Pin exact versions in composer.lock; add an integration test that exercises enqueue/dequeue on every dependency bump. |
Nullable put() / bounded queues |
Highest new risk. Ignored return value = jobs silently dropped under load; failures surface as missing work, not errors. | Define an explicit overflow policy (fail loudly, spill to fallback queue, or block/retry with backoff); assert non-null in the driver; alert on null-return rate. |
| Subqueue cardinality + TTL semantics | Dynamic naming invites name explosion; unclear whether TTL expires whole subqueues or pending jobs, and whether expiry can drop unprocessed work. | Establish a naming convention and cardinality budget; document TTL semantics with a test; alert on subqueue count and on TTL-expired-with-pending-jobs. |
| Tarantool operational maturity | Unchanged: niche backend, limited in-house expertise. CI dropping tarantoolctl signals a shift toward current tooling (tt) — server-version support is not stated. |
Confirm the tested Tarantool server version matrix; validate HA/backup/monitoring before committing. |
| Laravel integration depth | Still no first-party driver; custom glue remains ours to own and to re-verify against Laravel queue contract changes. | Build and own a thin TarantoolQueue driver with contract tests against the supported Laravel majors. |
| 0.x semver instability | A single minor release carried a PHP floor bump, a dependency bump, a return-type change, and new APIs. That cadence will continue. | Treat upgrades as planned work, not composer update; budget one integration cycle per minor release. |
| Failure handling / DLQ | Still no built-in dead-letter queue; retry logic remains manual. | Implement a custom DLQ using Tarantool metadata or a separate space. |
null, do we fail the request, spill to a fallback, or retry? Who is alerted, and how do we detect dropped jobs?tarantoolctl removal in CI? Is Tarantool 3.x supported?put() null handling, and subqueue TTL expiry with pending jobs.TarantoolQueue driver implementing Illuminate\Contracts\Queue\Queue; map put() === null → push() === false.tarantool/client ^0.11, upgraded in lockstep with the queue library.tarantoolctl suggests newer tooling. Treat the tested server matrix as unverified until confirmed.queue:work or a custom process manager.tarantool/client ^0.11, lockfile pins, integration test on enqueue/dequeue.put() mapping; test lifecycle (enqueue, process, retry, fail, full-queue rejection).composer update.subqueuettl removes the custom cleanup cron we previously would have written; typed APIs reduce bespoke serialization glue.| Failure Scenario | Impact | Mitigation |
|---|---|---|
Bounded queue full → put() returns null |
New. Jobs silently dropped if callers ignore the return value. | Map to push() === false; assert non-null in driver; define overflow policy; alert on null-return rate. |
| Subqueue TTL expires with pending jobs | New. Unprocessed work disappears without an error. | Verify TTL semantics with a test; alert on TTL expiry with non-zero backlog; size TTL well above worst-case drain time. |
| Subqueue name explosion | Memory/index bloat, degraded stats, harder debugging. | Naming convention + cardinality budget; periodic audit of subqueue inventory. |
| PHP/client version skew across workers | Mixed behavior (nullable vs. non-nullable put()), intermittent failures. |
Rolling deploy discipline; version check at worker boot; pin in lockfile. |
| Tarantool node failure | Job loss without replication. | Replication + synchronous writes for critical jobs. |
| Network partition | Workers cannot fetch jobs. | Circuit breakers and exponential backoff in workers. |
| Worker crash | Jobs remain unprocessed. | Laravel queue:failed table or custom DLQ in Tarantool. |
How can I help you explore Laravel packages today?