反应式编程的主要好处是它具有容错能力,并且可以处理比阻塞实现更多的事件,尽管处理通常会更慢。
我不完全了解事件的存储方式和位置。我知道有一个事件缓冲区,它可以调整,但如果队列未绑定,缓冲区可以很容易地重载内存,不是吗?这个缓冲区可以刷到磁盘上吗?把它留在记忆中不是一个好点吗?它是否可以与Lagom事件源或持久性Akka actor类似地配置,其中事件可以存储在DB中?
答案 0 :(得分:1)
简短的回答是否定的,这个缓冲区不能持久化。至少在参考实现中。
默认情况下,内部内存缓冲区最多可以容纳128个值,但有一些点。首先,当源发出项目比观察者更快或者操作员消耗它们时,存在backpressure
- 情境。因此,当此内部缓冲区过载时,您将获得MissingBackpressureException
,并且没有任何磁盘或其他方法可以保留它。但是,您可以调整行为,例如只保留最新的发射或只丢弃新的发射。有一些特殊的运算符 - onBackpressureBuffer
,onBackpressureDrop
,onBackpressureLatest
。
RxJava2引入了一种新类型 - Flowable,它默认支持背压,并提供了更多调整内部缓冲区的方法。
Rx是一种处理数据流的方法,您应该关心是否可以使用所有项目以及如果不能存储它们。
rxjava的一个主要优点是合同,有一些方法可以创建自己的运算符或使用某些扩展名,如rxjava-extras