【问题标题】:Reactor Core compilation issue反应堆核心编译问题
【发布时间】:2021-03-06 11:38:54
【问题描述】:

我对 Reactor-core 还很陌生,我正在尝试了解它的工作方式。我找到了一个我正在尝试运行的示例程序,但它给了我如下错误。

详情 -> Flux 类型中的方法 subscribe(Consumer super Integer>) 不适用于参数(new Flow.Subscriber(){})

据我了解,它需要一个订阅者实现来创建订阅,以便从通量中获取数据。

请帮忙。

我在 JDK 8 和 JDK 11 中执行了它,但是两个 JDK 都出现了同样的错误。

    public static void callCustomSubscribe() {
        List<Integer> elements = new ArrayList<Integer>();
        
//      Subscriber<Integer> subs = new SubscribeImpl();

        Flux.just(1, 2, 3, 4)
          .log()
          .subscribe(new Subscriber<Integer>() { // Error comes here
            @Override
            public void onNext(Integer integer) {
              elements.add(integer);
            }

            @Override
            public void onError(Throwable t) {}

            @Override
            public void onComplete() {}

            @Override
            public void onSubscribe(Subscription subscription) {
                // TODO Auto-generated method stub
                subscription.request(Long.MAX_VALUE);
            }
        });
    }

【问题讨论】:

    标签: spring java-8 spring-webflux


    【解决方案1】:

    不,它不需要自定义Subscriber 实现来运行。 Reactor 中已经实现了几个。

    我真的不明白你想用你的代码做什么。但是您通常不会声明外部 ArrayList 并在 lambdas 中使用它。它更像是你在 lambdas 中进行转换的 java 流。

    示例:

    Flux.just(1, 2, 3, 4)
        .map(value -> {
            return value += 1;
        })
        .subscribe(n -> {
            System.out.println(n);
        });
    

    我开始了解reactor 的好方法是阅读reactor 文档的开头。 Simple ways to create a Flux or Mono and Subscribe to it.

    您的错误是因为您使用的是Flow.Subscriber,而它真正想要的是Consumer,这是一个完全不同的界面。如果你真的想实现一个完整的订阅者,一个好的开始是使用 BaseSubscriber 作为抽象基础,然后覆盖其中的一些功能,但这更多的是中间练习。

    【讨论】:

    • 其实我这里放的代码只是为了了解如何写一个客户订阅。它并不意味着真正做任何事情,因此无需头脑风暴为什么要使用外部 Arraylist。您是说 Flow.Subscriber 不能放在订阅中,因为这是本网站所写的内容。链接 -> baeldung.com/reactor-core
    • 如果您阅读我的回答,我不会这么说。我在解释你的错误信息告诉你什么。如果我猜是你混淆了你的导入并且你正在导入Flow.Subscriber而不是来自baeldung博客中使用的包org.reactivestreamsreactive-streams.org/reactive-streams-1.0.0-javadoc/org/…中的Subscriber接口。
    • 如果您查看 Flux api,您可以看到 subscribe 函数的几种实现,一种采用 consumer,另一种采用来自 @987654341 的 Subscriber @ 包裹。所以确保你有正确的导入projectreactor.io/docs/core/release/api/reactor/core/publisher/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2022-10-14
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多