У меня есть система, которая возвращает сообщения + объекты в конце обработки. 2 варианта:
- на экран (jQuery / VueJS), когда API вызывается с экрана
- для вызывающей стороны, как JSON / XML, когда вызывается API извне
Во время тестирования производственных данных я понял, что система генерирует слишком много сообщений и не хватает памяти. Так как входит в рекурсию. Несмотря на то, что, в конце концов, все количество сообщений не так велико, из-за довольно большого количества объектов, задействованных во время обработки, оно может взломать sh систему.
Структура вызова похожа на [{"cmd":"create object1"}]
object1
создано, - сообщение сохранено:
success: object1 is created with id:##
- в зависимости от
object1
элементов найдено, - сообщение сохраняется:
for object1 found X dependent objects, processing:
- для каждого найденного элемента, система создает
object1.item#n
сообщение сохраняется: started processing object1.item#n
в зависимости от object1.item#n
создаются подпункты и подобъекты, также создаются сообщения
- сообщение сохраняется:
finished processing object1.item#n
- сообщение сохраняется:
finished processing object1
Существует 2-4 уровня иерархии.
Я принимал следующие варианты:
Сохраняйте каждое выходное сообщение как JSON в простой таблице БД / стеке Redis, что-то вроде «сеанса»: JSON. И "pu sh" это пользователю / запрашивающему телу в конце обработки (поскольку у нас все как синхронный процесс) / Вероятно, это может быть хорошим способом для запуска.
Создайте очередь как-нибудь (возможно, это лучший способ, но я не очень хорош в очередях), где вход для следующего шага - это выход предыдущего, а "посередине" я могу сохранить сообщение.
Пожалуйста, предложите способы, примеры / ссылки, если это возможно, с лучшим способом сделать работу.