/test_be_2

Primary LanguageJavaScript

##Задача:

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

  • Сообщение не обрабатывается : 1 минуту; 3 минуты; 5 минут; удаляется из очереди.
  • Данные таймауты присваиваются сообщению после 1й, 2й и 3й попыток соответственно.

##Решение: Написан простенький сервер на nodejs с использованием express На вход дается число 1..100, сервер при запросе так же генерирует число 1..100 и сравнивает эти 2 числа В случае если число сервера больше - возвращается false В ином случае - true.

Имеется очередь redis.

Написан генератор, которы записывает сообщения в очередь с таймаутом 1..10 сек. (generator.js) Сообщения имеют вид: {value: NUM, lastTryAt: NUM, tryes: NUM} где value - генерируемое число 1..100;lastTryAt - время последней попытки;tryes - кол-во попыток; Для записи в очередь данное соообщение коныертируется в строку.

Написано приложение которое берет первое сообщение из очереди (соответсвенно удаляя его) (sender.js)

Далее сообщение конвертируется в объект и обрабатывается: Если небыло ни одной попытки: * кол - во попыток становится 1, * записывается время проверки * передается добро на отправку сообщения на сервер

Если была одна попытка и более (до 3х):

  • если с момента последней попытки прошло более 1;3;5(при 1,2,3х попытках соответственно) мин: кол-во попыток увеличивается на 1, записывается время проверки передается добро на отправку сообщения на сервер
  • в противном случае: передается отказ на отправку, сообщение не изменяется

Далее если после обработки сообщения - поступило добро на отправку - сообщение отправляется на сервер

  • Если приходит true: сообщение записывается в отдельную очередь
  • В противном случае: если попыток меньше 4: сообщение записывается в конец очереди в противном случае сообщение никуда не записываеся - сооьтветственно удаляется
  • Если добра на отправку нет - сообщение просто записывается в конец очереди.

Перед запуском:

npm i

Запуск

node app.js # Запускает сервер
node start.js # запускает само приложение