Version 0.0.0.1
Примечания к релизу: Версия 0.0.0.1
Введение
Это первая версия системы Model Event Observer, предназначенной для захвата событий, связанных с моделями (например, операции вставки и обновления), и публикации их в RabbitMQ с использованием topic
exchange. Данная версия закладывает основу для построения событийно-ориентированной архитектуры, обеспечивая эффективное взаимодействие между различными компонентами системы.
Возможности
-
Захват и публикация событий
- Захватывает события
INSERT
иUPDATE
из Active Record моделей. - Публикует события в RabbitMQ с использованием структурированного формата ключа маршрутизации:
<from>.<model>.<event>.<scenario>
. - Поддерживает JSON-сериализацию данных событий для удобного использования потребителями.
- Захватывает события
-
Дизайн ключей маршрутизации
- Реализован гибкий формат ключей маршрутизации:
-
<from>
: Идентифицирует источник события (например, название сервиса или приложения). -
<model>
: Указывает класс модели, связанной с событием. -
<event>
: Определяет тип события (insert
,update
). -
<scenario>
: Предоставляет дополнительный контекст операции (например,default
,payment
,archive
).
-
- Реализован гибкий формат ключей маршрутизации:
-
Поддержка Topic Exchange
- Использует
topic
exchange RabbitMQ для гибкой маршрутизации. - Позволяет потребителям подписываться на определенные шаблоны событий с использованием подстановочных символов (
*
и#
).
- Использует
-
Управление состоянием
- Отслеживает изменения состояния моделей в течение жизненного цикла запроса.
- Агрегирует несколько изменений в одно событие для эффективной обработки.
-
Расширяемость
- Разработано с учетом будущих улучшений, таких как поддержка дополнительных типов событий (
delete
) и пользовательских полезных нагрузок.
- Разработано с учетом будущих улучшений, таких как поддержка дополнительных типов событий (
Известные ограничения
-
Типы событий: В текущей версии поддерживаются только события
INSERT
иUPDATE
. Поддержка событийDELETE
будет добавлена в будущих релизах. - Обработка ошибок: Реализована базовая обработка ошибок, но механизмы повторных попыток и очереди недоставленных сообщений пока не поддерживаются.
- Тестирование производительности: Система протестирована в среде разработки. Требуется дополнительное тестирование для сценариев с высокой пропускной способностью.
Установка и настройка
-
Предварительные требования
- PHP 7.4 или выше.
- Фреймворк Yii2.
- Сервер RabbitMQ с
topic
exchange, названнымrouter
.
-
Настройка
- Добавьте поведение
ModelChangeBehavior
к вашим Active Record моделям. - Настройте компонент
ModelEventObserver
в конфигурации приложения Yii2:'components' => [ 'modelEventObserver' => [ 'class' => \deck\ModelEvent\ModelEventObserver::class, 'from' => 'your_service_name', ], ],
- Добавьте поведение
-
Настройка RabbitMQ
- Создайте
topic
exchange с именемrouter
. - Привяжите очереди к exchange, используя соответствующие ключи маршрутизации (например,
*.User.*.*
для событий, связанных с пользователями).
- Создайте
Пример использования
-
Поведение модели Добавьте поведение
ModelChangeBehavior
к вашим Active Record моделям:public function behaviors() { return [ \deck\ModelEvent\ModelChangeBehavior::class, ]; }
-
Публикация событий При сохранении модели событие автоматически публикуется в RabbitMQ. Например:
- Ключ маршрутизации:
service1.User.insert.default
- Полезная нагрузка:
{ "from": "service1", "model": "User", "id": "123", "event": "insert", "scenario": "default", "payload": { "old": {}, "new": { "id": 123, "name": "Иван Иванов", "email": "ivan@example.com" } }, "previous": [], "extra": {} }
- Ключ маршрутизации:
Планы на будущее
- Добавить поддержку событий
DELETE
. - Реализовать расширенную обработку ошибок и механизмы повторных попыток.
- Внедрить поддержку пользовательских процессоров событий.
- Оптимизировать производительность для сценариев с высокой пропускной способностью.
- Предоставить панель мониторинга для отслеживания опубликованных событий.