我认识一个Publisher
不得同时发布,但如果我使用Flux#create(FluxSink)
,我可以安全地打电话吗FluxSink#next
同时?
换句话说,Spring 是否具有内部魔力来确保事件的正确串行发布,即使FluxSink#next
被同时调用?
public class FluxTest {
private final Map<String, FluxSink<Item>> sinks = new ConcurrentHashMap<>();
// Store a new sink for the given ID
public void start(String id) {
Flux.create(sink -> sinks.put(id, sink));
}
// Called from different threads
public void publish(String id, Item item) {
sinks.get(id).next(item); //<----------- Is this safe??
}
}
It 对我来说听起来 like 这一段 http://projectreactor.io/docs/core/release/reference/#producing.create官方指南中表明上述确实是安全的,但我对自己的理解不是很有信心。
create
是一种更高级的 Flux 编程创建形式,适用于每轮多次发射,甚至可以从多个线程发射。
Yes, Flux.create https://github.com/reactor/reactor-core/blob/v3.2.0.RELEASE/reactor-core/src/main/java/reactor/core/publisher/Flux.java#L700产生一个SerializedSink https://github.com/reactor/reactor-core/blob/v3.2.0.RELEASE/reactor-core/src/main/java/reactor/core/publisher/FluxCreate.java#L93可以安全地从多个线程使用next
calls
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)