Event-Driven Messaging (Spring Boot 3)
Guardrails for building Kafka, RabbitMQ, Pulsar, and JMS producers/consumers in Spring Boot 3 with versioned event contracts, idempotency, bounded retries, DLQs, and the transactional outbox.
Dev & CodingAdvanced★ 257⑂ 40AI score 7/10Last updated: Aug 14, 2026
What it does
Gives Claude a concrete rulebook to follow whenever it writes or reviews Spring Boot 3 messaging code.
- Event contract: immutable envelope with
eventId,eventType,occurredAt,schemaVersion, plus payload; treat published schemas as APIs; correlation/causation IDs in headers; never publish JPA entities - Producer rules: publish only after the state change is durable, transactional outbox when DB and broker must agree, deterministic partition keys for per-aggregate ordering, explicit delivery timeout and acks
- Consumer rules: idempotent handlers via a durable processed-event record, one transaction around state change + idempotency marker, classify transient vs permanent failures, bounded retries with backoff, poison messages to a dead-letter destination with original payload, reason, and attempt count
- Testing: serialization compatibility, handler idempotency, Testcontainers broker tests, duplicate/reordered/delayed/poison scenarios
- Gotchas: assuming exactly-once because the broker has transactions, retrying validation errors forever, publishing inside a DB transaction without an outbox, random partition keys, deserializing into entities
Who it's for
- Spring Boot (Java/Kotlin) backend engineers running Kafka or RabbitMQ microservices
- Teams fighting duplicate processing, lost events, or broken ordering
- Tech leads who want a shared review standard for messaging code
Example uses
- "Publish an OrderCreated event to Kafka when an order is created" → Claude proposes an outbox table and a versioned envelope instead of an in-transaction send
- "Review this @KafkaListener" → flags missing idempotency marker, unbounded retries, and no dead-letter route
- "Write integration tests for the payment consumer" → spins up a broker with Testcontainers and covers duplicate, delayed, and poison messages
· · · Install guide · · ·
Try it now, no install
Paste this into Claude to use the skill without installing anything.
Read the instructions in this file and follow them to help me: https://raw.githubusercontent.com/rrezartprebreza/spring-boot-skills/HEAD/skills/spring-boot-3/event-driven-messaging/SKILL.md What I want: (describe your task here)
If Claude can't open the link, open it yourself and paste the contents instead.
↓ If it works for you, download the ZIP below and install it. Then it runs on its own — no pasting each time.
Install in the Claude app (no terminal)
- Download the ZIP with the button below.
- In Claude, open Settings → Capabilities and turn on 'Code execution and file creation'. (one time)
- Go to Customize → Skills → + → 'Upload a skill' and upload the ZIP.
Install in Claude Code
Let Claude do it — paste this into Claude Code
Install the skill I found on Claude Skill Mart. Copy the skills/spring-boot-3/event-driven-messaging folder from the GitHub repo rrezartprebreza/spring-boot-skills into my ~/.claude/skills/event-driven-messaging/. When it's done, tell me in one line what this skill can do.
Install with a command instead
git clone https://github.com/rrezartprebreza/spring-boot-skills.git /tmp/sbs && mkdir -p ~/.claude/skills && cp -r /tmp/sbs/skills/spring-boot-3/event-driven-messaging ~/.claude/skills/⚠ This is a third-party skill. Check the source repository before installing.
- Open a terminal and clone the repo:
git clone https://github.com/rrezartprebreza/spring-boot-skills.git - Create the skills directory:
mkdir -p ~/.claude/skills - Copy the whole skill folder so the referenced examples come with it:
cp -r spring-boot-skills/skills/spring-boot-3/event-driven-messaging ~/.claude/skills/ - Verify with
ls ~/.claude/skills/event-driven-messaging— you should see SKILL.md (and an examples folder if shipped). - Restart Claude Code and try a prompt like "make this Kafka consumer idempotent and add a DLQ" inside your Spring Boot project.
View source on GitHub ↗License: MIT