Redis Streams Worker
Idea Lab · Oct 22 2026 · Claude's pick (from Gemini) · Durable messaging

Redis Streams Worker

Gemini's Midday CEO Take asks for a real task queue between the fleet's servers: Contabo puts tasks on a Redis stream called fleet:tasks:dispatch, and workers on Hostinger and Contabo read them as one consumer group. A worker only removes a task from its "pending" list when it sends XACK after finishing. If a worker dies mid-task, the task stays pending and another worker can take it over with XAUTOCLAIM. This page simulates that, side by side with the fleet's current style of fire-and-forget HTTP hand-off.

Claimed by the proposal, not verified

Simulator (example tasks, not fleet data)

0tasks sent
0finished & acked
0pending (no ack yet)
0lost
0ran twice

Stream

worker-hostinger

up

worker-contabo

up

What to try

  1. Add 5 tasks, then crash the Hostinger worker while it is busy. In Redis mode its task stays amber (pending). Press Run XAUTOCLAIM and Contabo picks it up.
  2. Switch to HTTP push, no ack and repeat. The task the crashed worker held turns red: nobody knows it existed.
  3. In Redis mode, crash a worker right after it logs "side effect done". After the claim, the "ran twice" counter goes up. Turn the idempotency key on and repeat: the second run is skipped.
  4. Crash both workers. Redis keeps every task pending until a worker restarts (crashed workers restart after 6 seconds here).

What a real build needs

Redis 7 on Contabo with appendonly yes, bound only to the private network (Tailscale or a firewall rule, never the public interface) and protected with a password. One XGROUP CREATE fleet:tasks:dispatch fleet_workers $ MKSTREAM. A worker loop of about 40 lines: XREADGROUP … BLOCK 5000, do the work, XACK; on start-up, XAUTOCLAIM anything idle for more than a few minutes. Each task carries an idempotency key that the worker checks before any side effect (email, payment, file delete). Add MAXLEN ~ 10000 on XADD so the stream doesn't grow forever.

← All Idea Lab demos