mk-josias / laravel-distributable-stream-redis
Redis Streams driver for the events of mk-josias/laravel-distributable: one ordered stream, a consumer group per module, failed entries retried before later ones, or dropped.
Package info
github.com/mk-josias/laravel-distributable-stream-redis
pkg:composer/mk-josias/laravel-distributable-stream-redis
Requires
- php: ^8.4
- mk-josias/laravel-distributable: v0.4.0
Requires (Dev)
None
Suggests
- ext-redis: PhpRedis client (predis/predis works too)
Provides
None
Conflicts
None
Replaces
None
README
The redis events driver of laravel-distributable, on Redis Streams.
composer require mk-josias/laravel-distributable-stream-redis
Its provider is discovered and registers the driver. The shipped default stream uses it once
DISTRIBUTABLE_STREAM_DRIVER=redis:
// config/distributable.php 'default' => [ 'driver' => env('DISTRIBUTABLE_STREAM_DRIVER', 'array'), // a database.redis connection, null for `default` 'connection' => env('DISTRIBUTABLE_STREAM_CONNECTION'), // the one Redis stream every module writes to 'key' => 'distributable:events', // how long a read waits, in ms 'block' => 5_000, // entries per read 'count' => 50, // after how long a dead consumer's pending entries are taken back, in ms 'claim_after' => 60_000, // block: a failed entry is retried before later ones; // skip: later ones go on, the failed one is dropped 'on_failure' => 'block', ],
| What it guarantees | |
|---|---|
| Order | every module writes to one Redis stream, so its entries keep the order they were published in |
| A cursor per consumer | one consumer group per consuming module: a new consumer disturbs none of the others |
| At least once | an entry is acknowledged after its handlers succeed; an unacknowledged one comes back |
| After a failure | block: the failed entry is retried before any later one; skip: later ones go on, the failed one is dropped |
It implements ArchivesStreams (stream:export, and --acknowledged), ReportsAcknowledgements
(guard_cleanup => acknowledge) and TrimsStreams (stream:trim). Nothing is trimmed on write:
run stream:trim on a schedule.
Needs Redis 5 or later, with PhpRedis or Predis.