算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
event-driven【设计与创意】Event-driven architecture patterns and best practices. Covers Saga, Outbox, CQRS, Event Sourcing, and messaging patterns for distributed systems. USE WHEN: user mentions "event-driven", "Saga", "Outbox pattern", "CQRS", "Event Sourcing", "distributed transactions", "eventual consistency", "message broker", "event bus", asks about "microservices comm…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: event-driven description: | Event-driven architecture patterns and best practices. Covers Saga, Outbox, CQRS, Event Sourcing, and messaging patterns for distributed systems.
USE WHEN: user mentions "event-driven", "Saga", "Outbox pattern", "CQRS", "Event Sourcing", "distributed transactions", "eventual consistency", "message broker", "event bus", asks about "microservices communication", "async patterns", "compensating transactions"
Full Reference: See advanced.md for Saga implementations (Node.js, Java), Outbox pattern implementations, Event Sourcing, CQRS, and idempotency patterns.
Deep Knowledge: Use
mcp__documentation__fetch_docswith technology:event-drivenfor comprehensive documentation.
| Pattern | Purpose | Complexity |
|---|---|---|
| Pub/Sub | Decouple producers from consumers | Low |
| Event Sourcing | Store state as event sequence | High |
| CQRS | Separate read/write models | Medium-High |
| Saga | Distributed transactions | High |
| Outbox | Reliable event publishing | Medium |
Manages distributed transactions across services without 2PC.
┌─────────┐ event ┌─────────┐ event ┌─────────┐
│Order Svc│────────────▶│Payment │────────────▶│Inventory│
└─────────┘ │ Svc │ │ Svc │
▲ └─────────┘ └─────────┘
│ compensate │ compensate │
└───────────────────────┴───────────────────────┘
┌─────────────┐
│ Saga │
│Orchestrator │
└─────────────┘
/ | \
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│Order │ │Payment│ │Invent.│
└───────┘ └───────┘ └───────┘
Ensures reliable event publishing with database transactions.
┌────────────────────────────────────────────┐
│ Database Transaction │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ Business │ │ Outbox Table │ │
│ │ Table │ │ (messages) │ │
│ └──────────────┘ └──────────────────┘ │
└────────────────────────────────────────────┘
│
Polling Relay / CDC
│
┌─────────────────┐
│ Message Broker │
└─────────────────┘
CREATE TABLE outbox (
id UUID PRIMARY KEY,
aggregate_type VARCHAR(255) NOT NULL,
aggregate_id VARCHAR(255) NOT NULL,
event_type VARCHAR(255) NOT NULL,
payload JSONB NOT NULL,
status VARCHAR(50) DEFAULT 'PENDING',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Commands Queries
│ │
▼ ▼
┌───────────────┐ ┌───────────────┐
│ Command Model │ │ Query Model │
│ (Write) │ │ (Read) │
└───────────────┘ └───────────────┘
│ ▲
▼ │
┌───────────────┐ Events ┌───────────────┐
│ Write Store │───────────────▶│ Read Store │
└───────────────┘ └───────────────┘
| Anti-Pattern | Why It's Bad | Solution |
|---|---|---|
| Event Soup | Too many fine-grained events | Design coarse-grained domain events |
| Missing Idempotency | Duplicate processing | Add idempotency keys |
| No Compensation Logic | Failed saga can't rollback | Implement compensating transactions |
| No Dead Letter Queue | Failed events lost | Configure DLQ for error handling |
| Weak Event Ordering | Race conditions | Use partitioning or ordered queues |
| Issue | Diagnostic | Solution |
|---|---|---|
| Lost events | Check message broker | Implement Outbox pattern |
| Duplicate processing | Logs show multiple executions | Add idempotency checks |
| Saga stuck | Compensation not triggered | Add timeout handling |
| Growing DLQ | Many failed messages | Analyze failures, fix consumers |
| Slow event processing | High message lag | Scale consumers, optimize handlers |
Available topics: patterns, saga, outbox, cqrs