Skip to content

v0.3.0 — three verbs on Redis Streams - #1

Merged
loicveyssiere merged 1 commit into
mainfrom
v0.3
Jul 27, 2026
Merged

v0.3.0 — three verbs on Redis Streams#1
loicveyssiere merged 1 commit into
mainfrom
v0.3

Conversation

@loicveyssiere

Copy link
Copy Markdown
Contributor

Replace the single-verb model (Pool + Scheduler + emit) with Moleculer's semantic surface carried on Redis Streams: call, dispatch and emit, with a message envelope, cascading deadlines and typed errors.

Pool and Scheduler merge into one Service, because the moment a handler calls another action its process is both executant and caller — the split forced one domain to live in two files.

Adds per-message ttl and delay, request correlation (rid/level/caller/meta), pydantic params validation, dispatch task records, and runtime switches that pause a service or registration without a deploy.

Fixes two live 0.2 bugs found on the way: idle workers reconnected every few seconds because redis-py's default socket_timeout is exactly the runtime's XREADGROUP BLOCK window, and the connection pool was never sized to the topology. Also hardens the worker loop, which previously let any failure outside a handler's own guard kill the process.

Breaking: the public API and the Redis keyspace both change, so 0.2 and 0.3 cannot interoperate. See CHANGELOG.md.

153 tests, 96% coverage, green on fakeredis and real Redis.

Replace the single-verb model (Pool + Scheduler + emit) with Moleculer's
semantic surface carried on Redis Streams: call, dispatch and emit, with a
message envelope, cascading deadlines and typed errors.

Pool and Scheduler merge into one Service, because the moment a handler calls
another action its process is both executant and caller — the split forced one
domain to live in two files.

Adds per-message ttl and delay, request correlation (rid/level/caller/meta),
pydantic params validation, dispatch task records, and runtime switches that
pause a service or registration without a deploy.

Fixes two live 0.2 bugs found on the way: idle workers reconnected every few
seconds because redis-py's default socket_timeout is exactly the runtime's
XREADGROUP BLOCK window, and the connection pool was never sized to the
topology. Also hardens the worker loop, which previously let any failure
outside a handler's own guard kill the process.

Breaking: the public API and the Redis keyspace both change, so 0.2 and 0.3
cannot interoperate. See CHANGELOG.md.

153 tests, 96% coverage, green on fakeredis and real Redis.

Co-Authored-By: Claude <noreply@anthropic.com>
@loicveyssiere
loicveyssiere merged commit 5b5a808 into main Jul 27, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant