Перейти к содержанию

EventSourceInterface

Источник событий для воркера: очередь, вебхук, файл, память.

Роутер сам забирает события в EventRouter::run() и рассылает их по одному. Удобнее всего реализовать генератором: код после yield выполняется, когда событие уже разослано, — там можно подтвердить сообщение в очереди.

final class QueueEventSource implements EventSourceInterface
{
    public function events(): iterable
    {
        while ($message = $this->queue->receive()) {
            yield new Event($message->getRoutingKey(), $message->getBody());

            $this->queue->acknowledge($message);   // событие разослано
        }
    }
}

Источник заканчивается, когда заканчивается итерация. Бесконечная очередь может не заканчиваться никогда — тогда воркер работает до остановки процесса.


  • Full name: \Selyusize\EventsRouter\Contract\Source\EventSourceInterface

Methods

events

События по одному, в порядке получения.

public events(): iterable<\Selyusize\EventsRouter\Contract\Core\EventInterface>