Skip to content
Development
Skill

/event-driven-messaging

Use when implementing Kafka, RabbitMQ, Pulsar, or JMS producers and consumers in Spring Boot 3. Covers event contracts, idempotency, retries, dead-letter handling, ordering, and outbox delivery.

From plugin
spring-boot-skills
26533 skills
Install
$ npx -y skills add rrezartprebreza/spring-boot-skills --skill event-driven-messaging --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/event-driven-messaging

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use when implementing Kafka, RabbitMQ, Pulsar, or JMS producers and consumers in Spring Boot 3. Covers event contracts, idempotency, retries, dead-letter handling, ordering, and outbox delivery.

SKILL.md

event-driven-messaging.SKILL.md
name: event-driven-messaging
description: >
  Use when implementing Kafka, RabbitMQ, Pulsar, or JMS producers and consumers in Spring Boot 3.
  Covers event contracts, idempotency, retries, dead-letter handling, ordering, and outbox delivery.

Event-Driven Messaging

Design for at-least-once delivery unless the complete system proves stronger semantics.

Event contract

  • Use an immutable event envelope with `eventId`, `eventType`, `occurredAt`, `schemaVersion`, and payload.
  • Treat published schemas as APIs. Add fields compatibly and never silently change meaning.
  • Put correlation and causation IDs in headers or the envelope.
  • Do not publish JPA entities or framework-specific serialization shapes.

Producer rules

  • Publish only after the originating state change is durable.
  • Use a transactional outbox when database state and broker publication must agree.
  • Use deterministic partition keys when per-aggregate ordering matters.
  • Configure delivery timeout and acknowledgements explicitly.

Consumer rules

  • Make handlers idempotent with a durable processed-event record or naturally idempotent write.
  • Keep the transaction boundary around the state change and idempotency marker.
  • Classify transient and permanent failures before configuring retries.
  • Bound retries with backoff, then route poison messages to a dead-letter destination.
  • Preserve the original event, failure reason, and attempt count for replay.

Testing

  • Test serialization compatibility and handler idempotency.
  • Use Testcontainers for broker integration tests.
  • Test duplicate, reordered, delayed, and poison messages.

Examples

  • See `examples/good-consumer.java` and `examples/bad-consumer.java`.

Gotchas

  • Agent assumes exactly-once delivery because the broker supports transactions - end-to-end side effects still need idempotency.
  • Agent retries validation failures forever - dead-letter permanent failures promptly.
  • Agent publishes inside a database transaction without an outbox - a crash can split state and event delivery.
  • Agent uses a random partition key - ordering for one aggregate is then lost.
  • Agent deserializes directly into a JPA entity - use a versioned event contract.
Read more
Ships withspring-boot-skills

Production-grade Claude Code and Codex skills for Spring Boot developers

Get the whole plugin

Other skills on spring-boot-skills.