Опрос базы данных с использованием RxScala

TableEntries Я начинаю с RxScala и пытаюсь придумать механизм опроса, который проверяет базу данных для каждого интервала (скажем, 20 секунд), чтобы проверить, были ли какие-либо изменения в некоторых строках в таблице.

object MyDatabaseService {

  def getAllEntries: List[MyTableEntries] = ???
}

Мне нужно начать с Observable, который будет выдавать List[MyTableEntries]. Итак, я начал со следующего:

class MyDBObservable(service: MyDatabaseService, observer: Observer[Seq[MyTableEntries]]) extends Observable[Seq[MyTableEntries]] {

  val o = Observable.interval(10.seconds).map { _ => service.getAllTableEntries }
  o.subscribe(observer)
}

В моем наблюдателе, который я передаю функции, у меня реализованы onNext, onError и onCompleted! Однако есть пара вопросов:

  1. Что произойдет, если моей базе данных потребуется более 30 секунд для ответа
  2. Что произойдет, если моя база данных полностью выйдет из строя?

Это правильный подход, что я сделал? Предложения?


person joesan    schedule 28.05.2015    source источник


Ответы (1)


Что произойдет, если моей базе данных потребуется более 30 секунд для ответа

Предположим, что первому service.getAllTableEntries требуется 30 секунд, второму и третьему service.getAllTableEntries требуется 1 секунда.

Тогда в вашем примере первое service.getAllTableEntries происходит через 10 секунд, второе происходит через 40 секунд, третье происходит через 41 секунду.

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

Что произойдет, если моя база данных полностью выйдет из строя?

Если это так, я думаю, что service.getAllTableEntries выдаст исключение, и вы получите его в onError.

person zsxwing    schedule 08.06.2015