使用RxScala进行数据库轮询

时间:2015-05-28 12:58:52

标签: observable rx-scala

TableEntries我从RxScala开始,我正在尝试建立一个轮询机制,检查每个间隔(比如说20秒)的数据库,检查表中某些行是否有任何变化。

object MyDatabaseService {

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

我需要从一个会发出List [MyTableEntries]的Observable开始。所以我从以下开始:

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

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

在我传入函数的Observer中,我实现了onNext,onError和onCompleted!但是有几个问题:

  1. 如果我的数据库需要超过30秒的响应时间会发生什么?
  2. 如果我的数据库完全关闭会怎样?
  3. 这是我做过的有效方法吗?建议?

1 个答案:

答案 0 :(得分:1)

  

如果我的数据库响应时间超过30秒会发生什么

假设第一个service.getAllTableEntries需要30秒,第二个和第三个service.getAllTableEntries需要1秒。

然后在你的例子中,第一个service.getAllTableEntries发生在10秒,第二个发生在40秒,第三个发生在41秒。

基本上,由于长时间运行,不会跳过事件。相反,只是推迟事件。

  

如果我的数据库完全关闭会怎么样?

如果是这样,我认为service.getAllTableEntries会抛出异常,您将在onError收到该异常。