Генератор/обработчик сообщений на базе 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