我有一個a將值發送到 sink的 source b。
現在我想要另一個c發出值的源,每次 b 接收到一個事件。
我的想法是使用另一個d可以用作通知器的接收器,但是我需要從接收器創建源的功能。
a.to(b).alsoTo(d)
就像是
Source.from(d)
uj5u.com熱心網友回復:
描述這一點的另一種方式是,您希望 發出的每個事件a都去b和c。這就是 a 的BroadcastHub作用;它可用于允許來自一個Source的事件被多個消費Sinks。
如果你將 a 連接Source到 aBroadcastHub.sink然后實作它,你會得到一個新的Source. 然后Source可以將其附加到 2 個或多個Sinks 上,每個都Sink將獲得原始發送的訊息的副本Source。
例如,我將它與 Akka 一起使用,以擁有一個向多個客戶端(用于 gRPC 事件)廣播訊息的 Actor:
val (actorRef: ActorRef[Event], eventSource: Source[Event, akka.NotUsed]) =
ActorSource.actorRef[Event](
completionMatcher = PartialFunction.empty,
failureMatcher = PartialFunction.empty,
16,
OverflowStrategy.fail
)
.toMat(BroadcastHub.sink)(Keep.both)
.run()
這將創建eventSource可以在管道中使用并多次物化以創建多個流的內容。每次向 發送訊息時actorRef,從其具體化的每個流都會eventSource接收該訊息。
有關更多詳細資訊,請參閱檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/453091.html
