← ClaudeAtlas

event-driven-architectlisted

Event-driven architecture — event/command taxonomy, Protobuf schemas, topic naming, mandatory outbox, partitioning, idempotency, DLQs, schema evolution. Broker-agnostic (NATS/Kafka/RabbitMQ). Use when designing event flows or auditing consistency.
ralvarezdev/ralvaskills · ★ 2 · Code & Development · score 73
Install: claude install-skill ralvarezdev/ralvaskills
# Event-Driven Architecture Patterns for services that communicate via asynchronous events. **Broker-agnostic** at the conceptual level; defaults inline per use case (NATS for lightweight, Kafka for log-based replay, RabbitMQ for command queues). **Protobuf schemas** for events ([protobuf-architect](../../encoding/protobuf-architect/SKILL.md)) so contracts get the same `buf breaking` discipline as gRPC. **Outbox pattern is mandatory** for any write that emits an event. Schemas, SQL, and tooling shapes in [RECIPES.md](RECIPES.md); pinned brokers and client libs in [STACK.md](STACK.md). ## 1. Event vs message vs command — the three shapes | Shape | Direction | Semantics | Example | |---|---|---|---| | **Event** | Past-tense, broadcast | "Something happened" — fact about the past, anyone can listen | `OrderPlaced`, `PaymentCaptured` | | **Command** | Imperative, point-to-point | "Do this" — request to one specific handler | `CancelOrder`, `SendEmail` | | **Message** | Generic envelope | Container for either — used when the distinction doesn't matter | (mostly an implementation detail) | - **Events are immutable past-tense facts.** `OrderPlaced` was placed; nothing changes that. Subscribers react however they want. - **Commands have one intended handler.** Multiple handlers reacting to a command is almost always wrong — it's an event in disguise. Rename it. - **Naming:** events are `<Noun><PastVerb>` (`OrderPlaced`, `ShipmentDispatched`); commands are `<Verb><Noun>` (`PlaceOr