Generates Message Broker Adapter components for PHP 8.4. Creates unified broker interface with RabbitMQ, Kafka, SQS adapters, message serialization, and unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates unified message broker abstraction with adapter implementations for multiple broker technologies.
| 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 |
Determine:
Domain Layer (src/Domain/Shared/Messaging/)
Message.php — Immutable message value objectMessageBrokerInterface.php — Broker portMessageSerializerInterface.php — Serialization contractMessageId.php — Message identity value objectInfrastructure Layer (src/Infrastructure/Messaging/)
JsonMessageSerializer.php — JSON serializerRabbitMq/RabbitMqAdapter.php — RabbitMQ implementationKafka/KafkaAdapter.php — Kafka implementationSqs/SqsAdapter.php — AWS SQS implementationInMemory/InMemoryAdapter.php — Testing adapterMessageBrokerFactory.php — Config-based adapter factoryTests
MessageTest.phpJsonMessageSerializerTest.phpInMemoryAdapterTest.phpMessageBrokerFactoryTest.php| Layer | Path |
|---|---|
| Domain Types | src/Domain/Shared/Messaging/ |
| Infrastructure | src/Infrastructure/Messaging/ |
| Broker Adapters | src/Infrastructure/Messaging/{Broker}/ |
| Unit Tests | tests/Unit/{Layer}/{Path}/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | MessageBrokerInterface | MessageBrokerInterface |
| Message VO | Message | Message |
| Adapter | {Broker}Adapter | RabbitMqAdapter |
| Serializer | {Format}MessageSerializer | JsonMessageSerializer |
| Factory | MessageBrokerFactory | MessageBrokerFactory |
| Test | {ClassName}Test | RabbitMqAdapterTest |
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;
}
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;
}
// 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);
});
Domain\Shared\Messaging\MessageBrokerInterface:
factory: ['@Infrastructure\Messaging\MessageBrokerFactory', 'create']
arguments:
$driver: '%env(MESSAGE_BROKER_DRIVER)%'
For complete PHP templates and test examples, see:
references/templates.md — All component templatesreferences/examples.md — Order event publishing example and unit testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.