Тестовое задание
Фоновый процесс, обеспечивающий получение данных из NSQ, производящий JSON валидацию и сохраняющий в Aerospike
Флаги для запуска:
Флаг | Описание |
---|---|
-nsq | Строка для подключения к серверу NSQ |
-topic | Топик для биндинга NSQ |
-message-count | Максимальное количество сообщений, забираемое за интервал времени |
-sec | Интервал времени сохранения данных в Aerospike |
-aerospike-server | Адрес сервера Aerospike |
-aerospike-port | Порт сервера Aerospike |
Описание реализации:
При старте приложения поднимаются коннекты до NSQ и Aerospike, в случае недоступности серверов приложение завершится со статусом 1.
NSQ хэндлеры, описанные в функции GetNSQLHandlerFunc, посылают данные в структуру Heap с помощью метода Add, который в свою очередь работает с блокировкой по заполнению внутреннего канала. Функция Get структуры Heap отдает нам накопленные данные внутри структуры и пересоздает внутренний канал для последующего сбора.
Рутина dataSaver является ключевой, принимающая данные от:
- Обработчика системных сигналов listenSystemSignals
- 5-минутного внутреннего тикера, обеспечивающего сохранение в Aerospike.
Формирование ключа для сохранения в Aerospike происходит случайным образом с помощью функции RandStringBytesMaskImprSrc
В файле example/producer.go присутствует producer для проверки работоспособности.