私は akka-io ack で動作するように設計された Actor を持っており、アップストリーム (ネットワーク) にメッセージを送信するときに ack を待ちます。このアクターは、バックエンドの非同期アプリケーションへのインターフェイスです。
この Actor を akka-streams に変換できるラッパー レイヤーが必要です。これにより、Flow[Incoming, Outgoing, ???]
そのような署名を期待する新しいライブラリと統合できます。
(アップストリームからの着信メッセージはめったにないので、バックプレッシャについてはあまり気にしませんが、それは悪いことではありません。)
sealed trait Incoming //... with implementations
sealed trait Outgoing //... with implementations
object Ack
// `upstream` is an akka-io connection actor that will send Ack
// when it writes an Outgoing message to the socket
class SimpleActor(upstream: Actor) extends Actor {
def receive = {
case in: Incoming if sender() == upstream =>
// does some work in response to upstream
case other =>
// does some work in response to downstream
// including sending messages to upstream and
// `becoming` a stashing state waiting for Ack
// to `unbecome`, then sending Ack downstream
// (which will respect the backpressure).
}
}
私は、akka-user メーリング リストから、アクターをストリームと統合するコードが akka-streams にないことを正当に認めています。 プッシュプルステージ.
ここでは、実際には 2 つPushPullStage
の が必要なようです... 1 つは for でupstream => SimpleActor
、もう 1 つは ですSimpleActor => upstream
。
私の質問は次のとおりです。
- このようなアクターとストリーム間の統合を提供するライブラリはありますか?
PushPullStage
ゼロから双方向を実装するよりも簡単な方法はありますか?- そのような実装のストレス テストを可能にする既存のテスト フレームワークはありますか?