0

私は 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

私の質問は次のとおりです。

  1. このようなアクターとストリーム間の統合を提供するライブラリはありますか?
  2. PushPullStageゼロから双方向を実装するよりも簡単な方法はありますか?
  3. そのような実装のストレス テストを可能にする既存のテスト フレームワークはありますか?
4

2 に答える 2

5

akka-stream の哲学は、低レベルのブリックを提供し、その上に高レベルのツールを構築することだと思います。最近リリースされたオープンソース ライブラリhttps://github.com/MfgLabs/akka-stream-extensionsを見ると、まさにそれを行っていることがわかります。レート リミッター、ステートフル プロセッサ、レイジー & ジェネレーターなどの管理を容易にするために、いくつかの便利な構造を提供します。アクターの統合については、アクターと akka-バックプレッシャを伝播しようとしているストリーム。Akka-Stream はまだ若く、エコシステムは成長し続けています ;)

于 2015-05-31T10:49:52.540 に答える