Project reactor 在反应堆水槽中。许多()相当于EmitterProcessor onCancel的是什么
我以前有密码Project reactor 在反应堆水槽中。许多()相当于EmitterProcessor onCancel的是什么,project-reactor,Project Reactor,我以前有密码 EmitterProcessor<String> emitter = EmitterProcessor.create(); FluxSink<String> sink = emitter.sink(FluxSink.OverflowStrategy.LATEST); sink.onCancel(() -> { cancelSink(id, request); }); 将知道Flux订户被取消(当浏览器关闭时),这将调用onCancel句柄 使用
EmitterProcessor<String> emitter = EmitterProcessor.create();
FluxSink<String> sink = emitter.sink(FluxSink.OverflowStrategy.LATEST);
sink.onCancel(() -> {
cancelSink(id, request);
});
将知道Flux订户被取消(当浏览器关闭时),这将调用onCancel
句柄
使用Sinks.Many()
我已经实现了
Many<String> sink = Sinks.many().unicast().onBackpressureBuffer();
sink.asFlux().doOnCancel(() -> {
cancelSink(id, request);
});
Flux<String> out = Flux
.from(sink.asFlux()
.log(log.getName()));
Many sink=Sinks.Many().unicast().onBackpressureBuffer();
sink.asFlux().doOnCancel(()->{
取消接收(id,请求);
});
通量输出=通量
.from(sink.asFlux())
.log(log.getName());
字符串通过浏览器的流量发布,但是当客户端关闭会话时,不再需要onCancel
来进行整理
看起来是这样,但我不明白解决办法。请问是什么?sink.asFlux().doOnCancel(…)
和sink.asFlux()
是两个不同的实例。您没有重用设置了取消处理逻辑的那一个,这就是为什么您没有在out
变量上观察cancelSink
清理
做一些更像:
Many<String> sink = Sinks.many().unicast().onBackpressureBuffer();
Flux<String> fluxWithCancelSupport = sink.asFlux().doOnCancel(() -> {
cancelSink(id, request);
});
Flux<String> out = fluxWithCancelSupport
.log(log.getName()));
Many sink=Sinks.Many().unicast().onBackpressureBuffer();
通量fluxWithCancelSupport=sink.asFlux().doOnCancel(()->{
取消接收(id,请求);
});
通量输出=通量带取消支持
.log(log.getName());
(注:您不需要使用
Flux.from(sink.asFlux())
,因为后者已经为您提供了Flux
)。谢谢,因此使用案例是使用sink(或Flux?)从另一个队列发送随机更新。它使用tryEmitNext(String)
将队列消息发送(或发布?)给flux订户。是否有Many
sink使用的Flux
等效于tryEmitNext
?谢谢…或者,正如我现在所做的,推荐使用sinktryEmitNext
来处理队列,然后将asFlux
转换为发布回调用者…我认为第二种方法,如果我理解正确的话。我的回答只是想说,您的代码片段基本上忽略了sink.asFlux().doOnCancel(…)的结果,因此其中的runnable将永远不会被调用。是的,谢谢,这太好了,我现在有了流程,但我遇到了我仍然缺少关于flux生命周期的一些东西?
Many<String> sink = Sinks.many().unicast().onBackpressureBuffer();
Flux<String> fluxWithCancelSupport = sink.asFlux().doOnCancel(() -> {
cancelSink(id, request);
});
Flux<String> out = fluxWithCancelSupport
.log(log.getName()));