Download the PHP package chocofamilyme/pubsub-life without Composer
On this page you can find all versions of the php package chocofamilyme/pubsub-life. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download chocofamilyme/pubsub-life
More information about chocofamilyme/pubsub-life
Files in chocofamilyme/pubsub-life
Package pubsub-life
Short Description Библиотека для реализаций паттерна Pub/Sub
License BSD-3-Clause
Homepage https://github.com/chocofamilyme/pubsub-life
Informations about the package pubsub-life
Библиотека pub/sub
Библиотека реализует событийную архитектуру приложений (Event-Driven Architecture).
Рабочий пример можно посмотреть вот здесь: https://github.com/chocofamilyme/pubsub-life/tree/master/examples
Возможности
- Публикация событий без транзакции
- Подписка на события
- Повторная отправка события в ту же очередь при необходимости
Требования
- PHP >=5.6
- PHP ext-sockets
Установка
Настройка
На данный момент библиотека работает только с RabbitMQ, при желании можно добавить другие.
Настройка конфигов
Полный список смотрите - https://github.com/php-amqplib/php-amqplib
Использование
Для RabbitMQ переменная $routeKey
должна состоять минимум из двух частей разделенных точкой .
. Пример order.created
. Имя Exchange будет содержать первый блок, т.е. order
. После этого если зайдете в админку rabbitmq должен создаться exchange с именем order
.
Обновленно: начиная с версии 2.* можно указать exchange
, которому привяжется маршрут $routeKey
Обновленно: начиная с версии 2.* можно указать exchange
и связать с ним маршрут. Теперь можно указать массив маршрутов.
Чтобы обратно отправить сообщение в очередь необходимо в callback-функции кинуть исключение Chocofamily\PubSub\Exceptions\RetryException
. Сообщение может максимум 5 раз обработаться повторно, после этого он попадает в очередь мертвых сообщений (exchange = DLX).
В подписчик можно передавать следующие настройки:
Ключ | Тип | Описание |
---|---|---|
durable | bool | сохранять на диск данные, для большей надежности |
queue | array | настройки самой очереди |
prefetch_count | int | количество одноновременно обрабатываемых сообщений, одним обработчиком (не всеми) |
no_ack | bool | требуется ли подтверждение сообщений |
auto_delete | bool | Удаление exchange, если нет подключений к нему |
app_id | string | уникальный ID приложения. Можно использовать для идентификации откуда событие пошло изначально |
long_liver | bool | запускать ли воркер в цикле (по-умолчанию true) |
TODO:
- Реализовать транзакционность (возможно обертка над библиотекой)
- Внедрить middleware-объекты для реализации разных обработчиков (логирование, обработка исключений, перезапуск callback-функции и тд)
- Покрыть тестами (50%)