【发布时间】:2018-09-28 15:56:01
【问题描述】:
我知道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??
}
}
它听起来像官方指南中的this paragraph 表明上述确实是安全的,但我对自己的理解不是很有信心。
create是一种更高级的 Flux 编程创建形式,适用于每轮多次发射,甚至来自多个线程。
【问题讨论】:
标签: java spring concurrency project-reactor reactive-streams