Search by

Очередь CloudCastle: диспетчер, идемпотентность, сообщения.

v1.9.0 2026-11-07 23:21 UTC

README

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

CloudCastle Queue

CloudCastle Queue

Packagist Version Downloads PHP Version License

Transactional outbox, идемпотентный диспетчер и CLI-воркер для PHP 8.1+ (CloudCastle).

Установка

composer require cloud-castle/queue

Требуется PHP 8.1+. Продюсер брокера (например cloud-castle/kafka) и хранилище outbox (например cloud-castle/orm → ModelOutboxStore) подключаются приложением.

Быстрый старт

<?php

use CloudCastle\DI\Container;
use CloudCastle\Provider\ProviderKernel;
use CloudCastle\Queue\Cli\WorkerLoop;
use CloudCastle\Queue\MessageHandlerInterface;
use CloudCastle\Queue\Outbox\OutboxStoreInterface;
use CloudCastle\Queue\QueueDispatcher;
use CloudCastle\Queue\QueueMessage;
use CloudCastle\Queue\QueueProducerInterface;
use CloudCastle\Queue\QueueServiceProvider;

$container = new Container();
// Config, Redis, Logger, OutboxStoreInterface, QueueProducerInterface — заранее в DI
$kernel = new ProviderKernel($container);
$kernel->register(new QueueServiceProvider());
$kernel->boot();

/** @var QueueDispatcher $dispatcher */
$dispatcher = $container->get(QueueDispatcher::class);
$dispatcher->register(new class implements MessageHandlerInterface {
    public function event(): string
    {
        return 'home.visited';
    }

    public function handle(QueueMessage $message): void
    {
        // доменная обработка
    }
});

/** @var WorkerLoop $loop */
$loop = $container->get(WorkerLoop::class);
$loop->runUntilSignal(
    static function (callable $shouldStop) use ($dispatcher): void {
        while (!$shouldStop()) {
            // consumer->consumeOne($dispatcher) …
        }
    },
    label: 'queue-worker',
);

Публикация через outbox:

use CloudCastle\Queue\Outbox\OutboxAwareProducer;
use CloudCastle\Queue\QueueMessage;

$producer = $container->get(OutboxAwareProducer::class);
$producer->publish(new QueueMessage(
    id: $uuid,
    event: 'home.visited',
    payload: ['path' => '/'],
));

Возможности

  • Transactional outbox — OutboxStoreInterface, OutboxPublisher, OutboxAwareProducer, OutboxRelay / OutboxRelayLoop
  • Идемпотентный диспетчер — QueueDispatcher + Redis IdempotencyStore (без дублей, retry, DLQ)
  • Контракты — QueueMessage, QueueProducerInterface, MessageHandlerInterface, DispatchResult
  • CLI — WorkerLoop + SignalStopFlag (SIGTERM/SIGINT)
  • DI — QueueServiceProvider (cloud-castle/provider)

Разработка

composer install
composer check    # линтеры + статический анализ + тесты
composer fix      # автоисправления (Rector, PHP CS Fixer, PHPCBF)
composer ci       # полный CI-пайплайн локально

Полный список команд с описаниями: composer run-script --list.

Документация

Лицензия

MIT © CloudCastle (alex-4-17@yandex.ru)

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano