gpt4 book ai didi

java - 使用 Reactor Project 或 RxJava 时可以保留事件队列吗

转载 作者:行者123 更新时间:2023-11-30 06:39:56 32 4
gpt4 key购买 nike

响应式(Reactive)编程的主要好处是它具有容错能力,并且可以比阻塞实现处理更多的事件,尽管处理通常会比较慢。

我不完全理解事件的存储方式和位置。我知道有一个事件缓冲区并且可以对其进行调整,但是如果队列未绑定(bind),该缓冲区很容易使内存过载,不是吗?该缓冲区可以刷新到磁盘吗?把它记在内存里不就是一个主义者吗?它是否可以像 Lagom 事件源或持久 Akka Actor 一样进行配置,其中事件可以存储在数据库中?

最佳答案

简短的回答是否定的,该缓冲区无法持久化。至少在引用实现中是这样。

默认情况下,内部内存缓冲区最多可容纳 128 个发出的值,但也有一些要点。首先,有一个backpressure - 当源发出项目的速度比观察者或运算符(operator)消耗它们的速度快的情况。因此,当这个内部缓冲区过载时,您会得到 MissingBackpressureException并且没有任何磁盘或其他方式来保存它。但是,您可以调整行为,例如仅保留最新的发射或仅删除新的发射。为此有特殊的运算符 - onBackpressureBuffer , onBackpressureDrop , onBackpressureLatest .

RxJava2 引入了一种新类型 — Flowable默认情况下支持背压,并提供更多调整内部缓冲区的方法。

Rx 是一种处理数据流的方法,您应该关心是否可以使用所有项目以及如果不能的话如何存储它们。

rxjava 的主要优点之一是契约,并且有多种方法可以创建您自己的运算符或使用一些扩展,例如 rxjava-extras

关于java - 使用 Reactor Project 或 RxJava 时可以保留事件队列吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44536900/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com