簡體   English   中英

在Akka Streams中將Sink轉換為Graph(SinkShape)?

[英]Convert Sink to Graph(SinkShape) in Akka Streams?

我有這樣的事情:

implicit val system = ActorSystem("actorSystem")
implicit val materializer = ActorMaterializer()

val (ref: ActorRef, publisher: Publisher[(String, String, String)]) =
  Source.actorRef[(String, String, String)](bufferSize = 1000, OverflowStrategy.fail)
    .toMat(transferFTP(_))(Keep.both)
    .run()

def transferFTP(data: (String, String, String)): Sink[ByteString, Future[IOResult]] = {
  // ...
}

在我讀過的每個例子中, toMat()Sink作為參數,但編譯器需要Graph[SinkShape[(String,String,String)], NotInferedMat2]

toMat確實需要一個Sink Sink[(String, String, String), _]Graph[SinkShape[(String, String, String)], _] (換句話說,前者是后者的子類)。 其中一個問題是你傳入了一個Sink[ByteString, _] 此外,當您的Sink器的具體化值是Future[IOResult]時,您期望Publisher[(String, String, String)] Future[IOResult]

以下是類型對齊的示例,從而使編譯器滿意:

val tupleToByteString: ((String, String, String)) => ByteString = ???

val transferFTP: Sink[ByteString, Future[IOResult]] = ???

val (ref: ActorRef, sink: Future[IOResult]) =
  Source.actorRef[(String, String, String)](bufferSize = 1000, OverflowStrategy.fail)
    .via(Flow.fromFunction(tupleToByteString)) // alternatively: .map(tupleToByteString)
    .toMat(transferFTP)(Keep.both)
    .run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM