【问题标题】:server sent event spring webFlux with reactor服务器发送事件 spring webFlux with reactor
【发布时间】:2017-12-15 18:54:12
【问题描述】:

这是否是通过浏览器客户端发送常见主题信息的正确方法?

@RestController
public class GenvScriptHandler {

    DirectProcessor<String> topicData = DirectProcessor.create();
    FluxSink<String> sink;
    int test;


    @GetMapping(value = "/addTopic")
    public void addTopic() {
        if (sink == null) {
            sink = topicData.sink();
        }
        sink.next(String.valueOf(test++));
    }

    @GetMapping(value = "/getTopic", produces = "text/event-stream")
    public Flux<String> getTopic() {
        Flux<String> autoConnect = topicData.publish().autoConnect();

        return autoConnect;
    }
}

当我使用 DirectProcessor 时,不可能有背压,我想知道通过 sse 发送时通量是如何消耗的。订阅者是否可以请求少于在通量中推送的数字元素?

http://projectreactor.io/docs/core/release/reference/#_directprocessor

因此,如果您通过 DirectProcessor 推送 N 个元素,但其订阅者中至少有一个请求少于 N 个,则 DirectProcessor 会向其订阅者发出 IllegalStateException 信号。

【问题讨论】:

    标签: spring reactive-programming server-sent-events project-reactor


    【解决方案1】:

    使用 SSE 请求订阅,执行 请求(1)而不是请求(Integer.MAX_VALUE)

    因此,如果我沉入 * 1000 次,处理器过载并引发异常,即使它有订阅者:

    reactor.core.Exceptions$OverflowException: Can't deliver value due to lack of requests
    

    在我的情况下使用 EmitterProcessor 或 ReplayProcessor 更安全

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2021-04-22
      • 2019-01-26
      • 1970-01-01
      • 2019-02-09
      • 2020-11-22
      • 2020-07-25
      • 2012-04-22
      • 2019-07-31
      相关资源
      最近更新 更多