提供 Flux 来指示没有具体值的事件?
Provide Flux to signal events without a concrete value?
如何使用项目 Reactor that emits events over time but without any concrete values. I thought about Flux<Void>
but the documentation 设置 stream/publisher 提到 Flux<Void>
是一个空流。
例如,我使用文件系统更改的流 Flux<Path>
。我不需要 Path
值但想添加其他事件。为此,我必须创建虚拟 Path
对象。
Flux<Path> events = getFilesystemChanges();
events.startWith(Path.of("dummy"))
.map(e -> 42 /* subsequent operator ignores the emitted value */)
...
是否可以避免使用虚拟值,或者是否有一种约定来表示这些值未被读取?
Reactive 流仅适用于对象(您永远无法流式传输 null
),并且由于 Void
永远无法实例化,因此您永远无法发送任何值 - 只是一个完成信号。
我不太确定这里的用例,但是您可以考虑两种不同的方法 spring:
如果您永远不需要该值,您可以只映射到 Object
,即
Flux<Object> events = getFilesystemChanges().map(p -> new Object());
然后您可以使用 events.startWith(new Object())
继续。 (如果您愿意,您当然可以选择比 Object
更合适的类型,或者创建您自己的类型。)
如果您需要发出的实际值,但有时只需要插入您自己的 "dummy" 值,那么您可以使用 Optional<Path>
流:
Flux<Optional<Path>> events = getFilesystemChanges().map(Optional::of);
然后你可以events.startWith(Optional.empty())
为流添加一个"dummy"路径。
FWIW,我经常用于 "heartbeat" 类型函数的第二种方法,我希望在其中发出一个值流,但也希望确保每个 activity 一次(时间段) 以保持底层连接处于活动状态。后者是我经常使用空可选值的地方。
不确定这是否是您要查找的内容,但您是否尝试过 Flux.just(Optional.empty())?
如何使用项目 Reactor that emits events over time but without any concrete values. I thought about Flux<Void>
but the documentation 设置 stream/publisher 提到 Flux<Void>
是一个空流。
例如,我使用文件系统更改的流 Flux<Path>
。我不需要 Path
值但想添加其他事件。为此,我必须创建虚拟 Path
对象。
Flux<Path> events = getFilesystemChanges();
events.startWith(Path.of("dummy"))
.map(e -> 42 /* subsequent operator ignores the emitted value */)
...
是否可以避免使用虚拟值,或者是否有一种约定来表示这些值未被读取?
Reactive 流仅适用于对象(您永远无法流式传输 null
),并且由于 Void
永远无法实例化,因此您永远无法发送任何值 - 只是一个完成信号。
我不太确定这里的用例,但是您可以考虑两种不同的方法 spring:
如果您永远不需要该值,您可以只映射到
Object
,即Flux<Object> events = getFilesystemChanges().map(p -> new Object());
然后您可以使用
events.startWith(new Object())
继续。 (如果您愿意,您当然可以选择比Object
更合适的类型,或者创建您自己的类型。)如果您需要发出的实际值,但有时只需要插入您自己的 "dummy" 值,那么您可以使用
Optional<Path>
流:Flux<Optional<Path>> events = getFilesystemChanges().map(Optional::of);
然后你可以
events.startWith(Optional.empty())
为流添加一个"dummy"路径。
FWIW,我经常用于 "heartbeat" 类型函数的第二种方法,我希望在其中发出一个值流,但也希望确保每个 activity 一次(时间段) 以保持底层连接处于活动状态。后者是我经常使用空可选值的地方。
不确定这是否是您要查找的内容,但您是否尝试过 Flux.just(Optional.empty())?