首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合源时保留物化类型

组合源时保留物化类型
EN

Stack Overflow用户
提问于 2017-10-16 07:33:53
回答 2查看 74关注 0票数 0

我希望合并两个akka流源,并保留第一个源的ActorRef,以供物化后实际使用。

代码语言:javascript
复制
val buffer = 100

val apiSource: Source[Data, ActorRef] = Source.actorRef[Data](buffer, OverflowStrategy.backpressure)
  .delay(2.second, DelayOverflowStrategy.backpressure)

val kafkaSource:   Source[Data, Consumer.Control] = createConsumer(config.kafkaConsumerConfig, "test")

val combinedSource: Source[Data, NotUsed] = Source.combine(kafkaSource, apiSource)(Merge(_))

问题是combined方法忽略了物化类型,我想知道是否还有其他方法来实现这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-16 08:41:58

您可以使用Source#mergeMat

代码语言:javascript
复制
val combinedSource: Source[Data, ActorRef] = kafkaSource.mergeMat(apiSource)(Keep.right)
票数 1
EN

Stack Overflow用户

发布于 2017-10-16 08:42:57

这似乎起作用了

代码语言:javascript
复制
    def combineAndRetainFirst[T,M1, M2](first: Source[T, M1], second: Source[T, M2]): Source[T, M1] ={
    Source.fromGraph(
      GraphDSL.create(first, second)((m1, _) => m1){ implicit builder => (g1, g2) =>
        import GraphDSL.Implicits._

        val merge = builder.add(Merge[T](2))

        g1 ~> merge.in(0)
        g2 ~> merge.in(1)

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

https://stackoverflow.com/questions/46765118

复制
相关文章

相似问题

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