Search by

raxos / message-bus

basmilius

A Message Bus implementation for Raxos.

3.2.0 2026-10-02 17:09 UTC

This package is auto-updated.

Last update: 2026-10-03 12:06:28 UTC


README

Bas Milius

Raxos Message Bus

Publish and consume serialized PHP messages through RabbitMQ queues.

Documentation | Packagist | Raxos

  • Durable queues, persistent delivery and five message-priority levels.
  • Explicit accepted-class lists for deserialization.
  • Message-to-handler attributes, acknowledgement callbacks and worker limits.

Installation

Requires PHP 8.5 or later. Composer checks the remaining package and extension dependencies declared in composer.json.

composer require "raxos/message-bus:^3.2"

Usage

<?php
declare(strict_types=1);

use Raxos\Contract\MessageBus\HandlerInterface;
use Raxos\Contract\MessageBus\MessageBusInterface;
use Raxos\Contract\MessageBus\MessageInterface;
use Raxos\MessageBus\Attribute\Handler;
use Raxos\MessageBus\Enum\MessagePriority;
use Raxos\Terminal\Printer;

require __DIR__ . '/vendor/autoload.php';

#[Handler(GreetingHandler::class)]
final class Greeting implements MessageInterface
{
    public function __construct(public string $text) {}

    public function __serialize(): array
    {
        return ['text' => $this->text];
    }

    public function __unserialize(array $data): void
    {
        $this->text = (string)$data['text'];
    }
}

final readonly class GreetingHandler implements HandlerInterface
{
    public function handle(MessageInterface $message, Printer $printer): void
    {
        if ($message instanceof Greeting) {
            $printer->out($message->text);
        }
    }
}

function publishGreeting(MessageBusInterface $bus): void
{
    $queue = $bus->createQueue('greetings', allowedClasses: [Greeting::class]);

    $queue->publish(new Greeting('Hello'), MessagePriority::HIGH);
    $queue->close();
}

Create a connected MessageBus with your RabbitMQ host, port, username and password, then pass it to publishGreeting(). Consumers must configure the same allowed classes, including nested value objects; the default empty list rejects serialized deliveries. A consumer callback receives the handler and message: return true to acknowledge, or false to requeue. Handler failures also requeue; malformed or unregistered payloads are rejected without requeueing. Close the bus when the process finishes.

Documentation

Testing

Run this library's Pest suite from the Raxos workspace:

git clone --recurse-submodules https://github.com/basmilius/raxos.git
cd raxos
composer install
vendor/bin/pest --testsuite=message-bus

See Testing Raxos for PHP extensions, integration services and coverage commands. The library's Tests workflow also runs in GitHub Actions.

License

MIT. Copyright (c) 2017 - present Bas Milius.