// codeart.ru / Работаем с кодом / Синхронизация стейта через менеджер очередей Форум

Синхронизация стейта через менеджер очередей rss подписка

Автор: Evgeniy Sergeev

У меня появилось немного свободного времени и мне хочется потратить его на что-то полезное. Я люблю проводить небольшие эксперименты по использованию различных веб-технологий. В ближайшее время я хочу скрестить Redux, RabbitMQ и Invariant. Далее немного о сути эксперимента.

Цель эксперимента — создать SPA (Single Page Application), которое будет синхронизировать свой стейт с сервером посредством обмена сообщениями через менеджер очередей.

Мне нравится идея, используемая во Flux, что все изменения надо стейтом приложения выполняются с помощью управляющих воздействий (событий) и имеют единую точку входа (диспетчер). Таким образом, можно создать очередь событий в RabbitMQ, которая будет замыкаться на диспетчер SPA (назовем ее «входящей»). Т.е. диспетчер будет получать поток сообщений, которые будут преобразовываться в события и изменять стейт приложения.

При этом совершенно неважно полученное событие является ответом на какой-то запрос или инициировано сервером. Главное, что событие будет вносить необходимые изменения в стейт. А изменение стейта будет соответствующим образом изменять графическое представление через React.

Для генерации сообщений в сторону сервера будет создана еще одна очередь (назовем ее «исходящая»). В эту очередь будут попадать события от пользователя. Подписчиком у этой очереди будет сервер, который будет обрабатывать сообщения, а результат помещать во входящую очередь приложения.

В исходящее сообщение будет вложена информация о текущем состоянии приложения, а так же организована проверка инварианта текущего стейта. Предполагается, что пока во входящей очереди сообщений будут необработанные сообщения, инвариант не будет иметь истинного значения. Так же инвариант не будет истиным, если отсутствуют необходимые поля в текущем стейте.

Таким образом, вся логика работы будет сведена к линейной обработке входящих событий и такой же линейной последовательности исходящих событий. Целостность состояния будет осуществляться с помощью инварианта.

Leave a Reply

« »