首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >急切地停止Akka流源

急切地停止Akka流源
EN

Stack Overflow用户
提问于 2017-05-18 12:40:41
回答 1查看 368关注 0票数 0

我有以下(简化的)使用者,它应该在第一项之后取消一个Akka-Stream (2.11_2.5-快照) Source,但是onNext仍然被调用了4次:

代码语言:javascript
运行
复制
static Subscriber<Object> println() {
    return new Subscriber<Object>() {

        Subscription s;

        int n;

        @Override
        public void onSubscribe(Subscription s) {
            this.s = s;
            s.request(5);
        }

        @Override
        public void onNext(Object t) {
            System.out.println(Thread.currentThread().getName() 
                  + ": " + t + " - " + (++n));
            if (s != null) {
                s.cancel();
                s = null;
            }
        }

        @Override
        public void onError(Throwable t) {
            t.printStackTrace();
        }

        @Override
        public void onComplete() {
            System.out.println(Thread.currentThread().getName() + ": DONE");
        }
    };
}

public static void main(String[] args) throws Exception {
    Config cfg = ConfigFactory.parseResources(
        AkkaRange.class, "/akka-streams.conf").resolve();
    ActorSystem actorSystem = ActorSystem.create("sys", cfg);

    ActorMaterializer materializer = ActorMaterializer.create(actorSystem);

    Source<Integer, NotUsed> source = Source.repeat(1);

    Publisher<Integer> p = source.runWith(Sink.asPublisher(
         AsPublisher.WITH_FANOUT), materializer);

    p.subscribe(println());

    Thread.sleep(1000);

    actorSystem.terminate();
}

假设请求为5,但只进行了4次调用,我假设底层消息传递体系结构在检查消息队列是否取消(或进一步请求)消息之前,以4批方式响应请求。

有什么设置可以让取消的事情更迫切吗?

用例类似于互操作计算,其中有一个计算密集型阶段(map),它可能在1-2源元素之后产生所需的结果,在这种情况下下游取消流。问题是,由于这4批,计算也对其余的2-3个元素执行。

EN

回答 1

Stack Overflow用户

发布于 2017-05-19 16:57:31

Subscriber接口是一部份的反应流规范,它实现了许多库,包括akka.该规范说明了以下内容:

如果仍有请求的元素挂起,则订户必须准备在调用Subscription.cancel()之后接收一个或多个Subscription.cancel信号(参见3.12 )。Subscription.cancel()不能保证立即执行底层的清理操作。

因此,您必须手动处理订阅服务器中的这种情况,否则它将违反规范,因此不适合与实现规范的库一起使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44048058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档