Awesome-claude-code create-message-broker-adapter
Generates Message Broker Adapter components for PHP 8.4. Creates unified broker interface with RabbitMQ, Kafka, SQS adapters, message serialization, and unit tests.
install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-message-broker-adapter" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-message-broker-adapter && rm -rf "$T"
manifest:
skills/create-message-broker-adapter/SKILL.mdsource content
Message Broker Adapter Generator
Creates unified message broker abstraction with adapter implementations for multiple broker technologies.
When to Use
| Scenario | Example |
|---|---|
| Broker abstraction | Switch between RabbitMQ/Kafka/SQS without code changes |
| Multi-broker support | Different brokers for different bounded contexts |
| Testing isolation | InMemory adapter for tests |
| Migration path | Gradual migration from one broker to another |
| Vendor independence | Avoid lock-in to specific message broker |
Component Characteristics
MessageBrokerInterface
- Domain layer port
- publish(Message): void
- consume(string queue, callable handler): void
- acknowledge(Message): void
- reject(Message, bool requeue): void
Message
- Immutable value object
- Body (string), headers (array), routingKey, metadata
- Correlation ID and message ID
- Timestamp and content type
MessageSerializerInterface
- Serialize/deserialize messages
- JSON implementation by default
- Extensible for Avro, Protobuf
RabbitMqAdapter
- php-amqplib based
- Exchange and queue declaration
- Publish confirm mode
- Consumer with prefetch
KafkaAdapter
- RdKafka based
- Topic partitioning
- Consumer groups
- Offset management
SqsAdapter
- AWS SDK based
- FIFO and standard queues
- Long polling
- Visibility timeout
InMemoryAdapter
- For testing only
- Tracks published messages
- Synchronous consumption
Generation Process
Step 1: Analyze Request
Determine:
- Which broker adapters needed (RabbitMQ, Kafka, SQS, or all)
- Queue/topic naming conventions
- Serialization format
Step 2: Generate Core Components
-
Domain Layer (
)src/Domain/Shared/Messaging/
— Immutable message value objectMessage.php
— Broker portMessageBrokerInterface.php
— Serialization contractMessageSerializerInterface.php
— Message identity value objectMessageId.php
-
Infrastructure Layer (
)src/Infrastructure/Messaging/
— JSON serializerJsonMessageSerializer.php
— RabbitMQ implementationRabbitMq/RabbitMqAdapter.php
— Kafka implementationKafka/KafkaAdapter.php
— AWS SQS implementationSqs/SqsAdapter.php
— Testing adapterInMemory/InMemoryAdapter.php
— Config-based adapter factoryMessageBrokerFactory.php
-
Tests
MessageTest.phpJsonMessageSerializerTest.phpInMemoryAdapterTest.phpMessageBrokerFactoryTest.php
File Placement
| Layer | Path |
|---|---|
| Domain Types | |
| Infrastructure | |
| Broker Adapters | |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Interface | | |
| Message VO | | |
| Adapter | | |
| Serializer | | |
| Factory | | |
| Test | | |
Quick Template Reference
MessageBrokerInterface
interface MessageBrokerInterface { public function publish(Message $message, string $routingKey = ''): void; public function consume(string $queue, callable $handler): void; public function acknowledge(Message $message): void; public function reject(Message $message, bool $requeue = false): void; }
Message
final readonly class Message { public function __construct( public MessageId $id, public string $body, public string $routingKey = '', public array $headers = [], public ?string $correlationId = null, public ?string $contentType = 'application/json', public ?\DateTimeImmutable $timestamp = null, ) {} public static function create(string $body, string $routingKey = '', array $headers = []): self; public function withHeader(string $key, string $value): self; public function withCorrelationId(string $correlationId): self; }
Usage Example
// Publish $message = Message::create( body: json_encode(['order_id' => $orderId, 'total' => $total]), routingKey: 'orders.created' ); $broker->publish($message); // Consume $broker->consume('order_processing', function (Message $message) use ($handler) { $handler->handle($message); $this->broker->acknowledge($message); });
DI Configuration
Domain\Shared\Messaging\MessageBrokerInterface: factory: ['@Infrastructure\Messaging\MessageBrokerFactory', 'create'] arguments: $driver: '%env(MESSAGE_BROKER_DRIVER)%'
References
For complete PHP templates and test examples, see:
— All component templatesreferences/templates.md
— Order event publishing example and unit testsreferences/examples.md