/generator-redis-bus

Primary LanguageJavaScriptGNU General Public License v3.0GPL-3.0

Описание

Генератор/обработчик сообщений на базе redis.

Алгоритм

После запуска приложения оно пытается установить симофор с expire=expireTimeout, в случае удачной попытки оно становится генератором, увеличивает term на один и с интервалом expireTimeout / 2 обновляет expire симофора.

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

При запуске других экземпляров приложения, при неудачной попытке установить симофор, они становятся обработчиками и с интервалом expireTimeout будут пытаться вновь захваить его. В случае удачного захвата симофора (если старый генератор "упал" и не обновлял expire в течении времени expireTimeout), обработчик становтся генератором.

Опции при запуске

nodejs index.js [--getErrors, --msgTimeout=500, --expireTimeout=2000, --host=localhost, --port=6379]
Parametr Default Description
getErrors false Выводит на экран все ошибочные сообшения и удаляет их
msgTimeout 500 Интервал между отправкой сообщений
expireTimeout 500 Интервал, с которым обработчик проверяет "жив" ли генератор
host localhost Хост redis
port 6379 Порт redis

Тесты

Юнит тесты

mocha tests

Интеграционные тесты. MSG - задает количество сообщений для отправки (по умолчанию MSG=1000)

mocha tests-long

или

MSG=1000000 mocha tests-long