Можно ли передавать потоковый вложенный список Json? - PullRequest
2 голосов
/ 10 февраля 2020

API отвечает следующей "application/json" конструкцией типа тела:

{
  "transactions": [
    {
      "transaction": "1",
    },
    {
      "transaction": "2",
    },
        {
      "transaction": "3",
    }
  ]

}

по существу я сопоставил его с ..

    public class Transactions {
     private List<Transaction> transactions;
       ...
    }

В настоящее время я получить его как Mono<Transactions>, но у него есть недостатки - он буферизует весь список в памяти.

С Spring Reactive API можно ли обрабатывать список транзакций как поток так, чтобы он не буферизовался в памяти в целом?

Большое спасибо!

1 Ответ

2 голосов
/ 11 февраля 2020

После получения дополнительной информации в комментариях это ответ на вопрос.

Если приложение webflux выполняет блокирующий вызов API, не являющегося webflux, следует принять меры для его оборачивания в Mono#fromCallable и размещен в своем собственном потоке, чтобы он не мешал остальным неблокирующим потокам. Все это задокументировано в документации реактора под их faq

. Блокирующий вызов всегда будет возвращать один ответ, Mono, поэтому в приведенном выше случае он вернет List<Transaction>.

Поскольку у нас уже есть полный список после вызова блокировки, в большинстве случаев нет никакой реальной цели поместить это в поток, а затем отправить sh эти по одному клиенту.

Таким образом, возвращение Mono<List<Transaction>> вызывающему клиенту, вероятно, путь к go.

...