Узел JS - архитектура генератора файлов - PullRequest
0 голосов
/ 12 октября 2018

Необходимо добавить конечную точку REST API генератора файлов в веб-приложение.До сих пор я придумал следующую идею:

  1. клиент отправляет параметры файла в конечную точку
  2. сервер получает запрос и с помощью AMQP отправляет параметры в выделенную службу
  3. выделенныйслужба создает файл, помещает его в папку сервера и отправляет ответ, что файл, созданный с именем файла
  4. , конечная точка отправляет ответ клиенту с файлом

Я не уверен, что это хорошая идеяхранить запрос REST на сервере так долго.Но я все еще не хочу использовать электронную почту со сгенерированной ссылкой или сокетами.

Нужно ли устанавливать время ожидания в запросе, чтобы оно не отклонялось после долгого ожидания?Насколько я знаю, максимальный тайм-аут составляет 120 секунд для вызова остальных API.Если службе требуется больше времени для создания файла, тогда мне нужно использовать сокеты, верно?

1 Ответ

0 голосов
/ 15 октября 2018

Способ, которым я обработал подобное, состоит в том, чтобы сделать что-то вроде этого:

  1. Клиент отправляет запрос на файл.
  2. Сервер добавляет это в очередь с состоянием «запрошено»и отвечает (клиенту) почти немедленно ответом, который включает URL-адрес для извлечения файла.
  3. Некоторый фоновый поток / worker / webJob / etc выполняется в отдельном процессе от реального веб-сервера ипостоянно следит за очередью - когда он видит новую запись, он обновляет очередь до состояния «генерируется» и начинает генерировать файл.Когда он завершает работу, он обновляет очередь до состояния «готово» и переходит на ...
  4. , когда сервер получает запрос на загрузку файла (через URL-адрес, предоставленный клиенту), он может проверить состояниефайла в очереди.Если не готов, он может дать ответ с указанием этого.Если он готов, он может просто ответить содержимым файла.
  5. Клиент может использовать ответ на первоначальный запрос для повторного запроса URL-адреса, который ему был дан по прошествии подходящего периода времени, или повторно запрашивать егокаждые пару секунд или что-либо более подходящее.

Вам нужен какой-то способ для хранения очереди, которая легко доступна для обеих частей системы - база данных очевидна, но есть и другие вещиВы могли бы использовать ...

Этот подход позволяет избежать слишком больших усилий в потоке запросов или "зависания" клиента при запросе, пока сервер компилирует файл.

Это то, что ясделали (успешно) в таких ситуациях.Это также облегчает добавление таких вещей, как время жизни, в очередь, так что файл может автоматически «истечь» через некоторое время ...

...