首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >缓存Akka Substream源代码并重用它吗?

缓存Akka Substream源代码并重用它吗?
EN

Stack Overflow用户
提问于 2019-03-27 21:12:59
回答 1查看 274关注 0票数 0

有没有可能在不触发"Substream不能物化一次以上“的情况下缓存并重用源?

我正在做一个流连接,它需要为左边的每个元素调用一个微服务。该调用返回要加入的记录流。我希望缓存源,以便对微服务的相同调用在缓存流中产生结果。但是我正在做的flatMapConcat抛出了"Substream不能被物化不止一次“错误。代码如下所示:

    val cache = new util.HashMap[AnyRef, Source[Array[AnyRef], Any]]()

    inputSource
        .flatMapConcat { record =>
          val key = leftKey(record)
          val rightElemSource = if (cache.containsKey(key)) {
            cache.get(key)
          } else {
            val rightElemSourceInner = doSomethingToGetSource()
            cache.put(key, rightElemSourceInner)
            rightElemSourceInner
          }

          rightElemSource.map(join(record, _))
        }
EN

回答 1

Stack Overflow用户

发布于 2019-03-28 03:57:44

Source表示一个潜在的巨大甚至无限的数据流。它被设计成像Iterator一样只被遍历一次。如果你真的想要重用源代码的内容,你必须将它收集到一个常规的数据结构中,比如Seq。所以你的缓存应该是util.HashMap[AnyRef, Seq[Array[AnyRef], Any]]类型的。

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

https://stackoverflow.com/questions/55378093

复制
相关文章

相似问题

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