event-driven

Event-driven architecture with pub/sub and message queues. Use for reactive systems.

7 stars

Best use case

event-driven is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Event-driven architecture with pub/sub and message queues. Use for reactive systems.

Teams using event-driven should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/event-driven/SKILL.md --create-dirs "https://raw.githubusercontent.com/G1Joshi/Agent-Skills/main/skills/architecture/event-driven/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/event-driven/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How event-driven Compares

Feature / Agentevent-drivenStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Event-driven architecture with pub/sub and message queues. Use for reactive systems.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Event-Driven Architecture (EDA)

EDA is a software architecture paradigm promoting the production, detection, consumption of, and reaction to events. In 2025, it is the backbone of real-time, scalable, and decoupled systems.

## When to Use

- When strict decoupling is required (Producer doesn't know Consumer).
- High-volume, bursty traffic (using buffering queues).
- Asynchronous workflows (e.g., "User Signed Up" -> Send Email, Create Wallet, Analytics).
- Real-time updates (WebSockets/Push).

## Quick Start

```typescript
// Producer (Order Service)
await messageBroker.publish("order.created", {
  orderId: "123",
  userId: "456",
  timestamp: Date.now(),
});

// Consumer (Shipping Service)
// Doesn't need to be online when order is created
messageBroker.subscribe("order.created", async (event) => {
  await shippingService.schedulePickup(event.orderId);
  console.log("Shipping scheduled");
});

// Consumer (Analytics Service)
// New feature added later? No changes to Order Service!
messageBroker.subscribe("order.created", async (event) => {
  await analytics.trackRevenue(event);
});
```

## Core Concepts

### Event

A significant change in state (Immutable fact). "OrderCreated" not "CreateOrder".

### Broker (Event Bus)

The middleware (Kafka, RabbitMQ, SNS/SQS) that receives, stores, and routes events.

### Pub/Sub

Pattern where publishers send messages to a topic, and multiple subscribers receive them independently.

## Common Patterns

### Event Sourcing

Storing the state of an entity as a sequence of state-changing events rather than the current snapshot.

### CQRS (Command Query Responsibility Segregation)

Separating the Read and Write models. Writes publish events; Reads update a denormalized view based on those events.

### Transactional Outbox

Ensuring data consistency. Write the event to a DB table _in the same transaction_ as the business logic, then a background worker pushes it to the broker.

## Best Practices

**Do**:

- Use **Schemas** (Avro, Protobuf, JSON Schema) to govern event structure (Schema Registry).
- Ensure **Idempotency** in consumers (handling the same message twice safely).
- Monitor **Lag** (how far behind consumers are).

**Don't**:

- Don't use events for synchronous queries (Request/Response via queues is painful).
- Don't put huge payloads in events (Pass ID + Metadata, reference Blob Storage if needed).

## Tools

- **Kafka / Redpanda**: High throughput, log-based (replayable).
- **RabbitMQ / ActiveMQ**: Queue-based, complex routing.
- **AWS SNS/SQS / Google PubSub**: Cloud native.

## References

- [Event-Driven Architecture](https://aws.amazon.com/event-driven-architecture/)
- [AsyncAPI Specification](https://www.asyncapi.com/)