prefect server in zig
services#
background workers managed by services.zig.
registry#
simple array of function pointers:
pub const Service = struct {
name: []const u8,
start: *const fn () anyerror!void,
stop: *const fn () void,
};
const all = [_]Service{
.{ .name = "event_persister", .start = event_persister.start, .stop = event_persister.stop },
.{ .name = "event_broadcaster", .start = event_broadcaster.start, .stop = event_broadcaster.stop },
};
startAll() iterates forward, stopAll() iterates reverse.
event_persister#
subscribes to broker topic "events" with consumer group "event-persister".
- batch size: 100 events
- flush interval: 1 second
- deduplication:
INSERT OR IGNOREby event id - retention: 7 days, trimmed hourly
lifecycle: spawns worker thread on start(), signals and joins on stop().
event_broadcaster#
subscribes to broker topic "events" with ephemeral consumer group (unique per server).
fans out events to connected WS subscribers on /api/events/out.
- subscriber capacity: 256 connections
- filter support: event prefix, resource_id (parsed with std.json)
- drop policy: non-blocking writes, slow clients get disconnected
see src/services/CLAUDE.md for event flow details.