2016-10-20 8 views
0

Я создаю приложение, которое анализирует содержимое CSV на несколько «показаний». Затем он публикует эти показания на сервере API REST, где он добавляется в базу данных.Очереди для POST для API REST

Пока все хорошо (и выше работает). Тем не менее, я сознаю, что иногда могут возникать проблемы с подключением к серверу (задержки, или если API по какой-либо причине сходит).

Чтобы решить эту проблему, я планировал использовать Sidekiq для выполнения асинхронной передачи. Тем не менее, у меня есть несколько вопросов:

  • Am Я лучше от создания ActiveJob для выполнения поста, а затем просто очереди этой работы, когда CSV обрабатываются? Я предполагаю, что, если есть проблема с подключением, она в конечном итоге возобновится в том же порядке, в каком они добавлены?

  • Должен ли я сказать Sidekiq, чтобы «повторить» работу, или это произойдет просто автоматически?

  • Наконец, поскольку Sidekiq использует Redis, следует включить сохранение, чтобы при сбое сервера приложений, когда в очереди есть элементы, они не будут потеряны?

Есть ли еще что рассмотреть? Или лучший способ справиться с этим?

ответ

0

Есть два сценария

1) вы собираетесь поставить полную обработку CSV файл в на работе, в этом случае, я думаю, что это не будет работать идеально, как если задание не получится снова цикл по всем строкам. если вы не помечаете строки, добавив еще один столбец в CSV, скажем, прочитайте.

2) Вы добавляете каждую строку как отдельную Работу в Sidekiq, я могу думать только об одном недостатке, так как вы можете создать слишком много заданий, если у вас большие CSV-файлы, но это сэкономит много обработки на стороне CSV.

+0

В CSV будет только 1-2 строки, каждый из которых имеет 15 значений, и они будут поступать каждые 5 минут. Итак, имея в виду, я полагаю, что я должен создать задание «post row» и обработать его для каждой строки, а не для «процесса CSV»? –

+0

@JoeCzucha, да, я думаю, что это был бы лучший подход. Этот подход автоматически обрабатывает неудавшиеся задания и никогда не будет запускаться снова для успешно обработанной строки. –

+0

Спасибо за советы. :) Мне нужно будет запустить задание CRON, чтобы автоматически начать передачу всего в очереди каждые n минут или автоматически будет Sidekiq возобновить очередь в случае сбоя/перезапуска приложения? –