Отправить большой список объектов в Akka Http - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть большой список объектов (возможно, 1k-2k, хранящихся в дБ) на стороне сервера, которые необходимо отправить нескольким клиентам с помощью Akka Http по запросу клиента.Простое решение заключается в том, что я могу извлечь его из БД на стороне сервера, сделать байты из списка объектов, а затем отправить байты клиенту и затем преобразовать этот байт в объект.

* 1002.весь список объекта в байтах?

1 Ответ

0 голосов
/ 29 ноября 2018

Ответ на ваш вопрос включает в себя несколько шагов, как на стороне сервера, так и на стороне клиента.Примечание: все приведенные ниже примеры кода для краткости написаны на языке scala, а не java.На стороне сервера вам необходимо реализовать:

1.Потоковая передача данных из БД

Существует еще один стек / вопрос , который объясняет, как извлечь строки из базы данных с использованием потоковых методов.Конечный результат - у вас есть источник строк:

type DataObject = ???

val source : Source[DataObject,_] = ??? // see linked answer

2.Преобразование объекта DataObject в байты

На эту часть можно ответить только зная специфику ваших данных, и, похоже, эта часть уже реализована:

val converter : DataObject => ByteString

3.Присоединение к конечной точке REST

Вы можете использовать akka-http для настройки конечной точки REST, которую клиенты могут запрашивать для получения данных.Source ваших значений ByteString будет источником, подающим потоковую сущность для ваших HttpResponse

Настроить Route, который отвечает на GET запросов по определенному пути:

val route : Route = 
  get {
    path("/queryDB") {
      complete(HttpResponse(entity = HttpEntity(ContentTypes.`application/octet-stream`, source.map(converter))))
    }
  }

И используйте Route для запуска вашего сервиса:

Http().bindAndHandle(route, "localhost", 8080)

На стороне клиента есть подобных механизмов для чтения данных из HttpResponse.

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