次の問題を解決するために、akka-streams と akka-http を使用しようとしています。
- 2 つの http クライアント (A および B) が 1 つの http サーバー (C) にリクエストを送信します。どちらの側も akka-http を使用して通信します。
- A からの要求は B に比べて優先度が高くなりますが、両方の要求が同等に処理される必要があります。したがって、C は A からの要求を最初に処理し、B からの要求は 2 番目に優先されます。
- もちろん、両端でバックプレッシャーを有効にしたいと考えています
着信接続を 1 つの出力にマージするために、次のコードを考え出しました。
val g = RunnableGraph.fromGraph(FlowGraph.create() { implicit b: FlowGraph.Builder[Unit] =>
import FlowGraph.Implicits._
val merge = b.add(MergePreferred[IncomingConnection](1))
val inA: Source[IncomingConnection, Future[ServerBinding]] = Http().bind(interface = "localhost", port = 8200)
val inB: Source[IncomingConnection, Future[ServerBinding]] = Http().bind(interface = "localhost", port = 8201)
inA ~> merge.preferred
inB ~> merge.in(0)
merge.out ~> Sink.foreach(println)
ClosedShape
}).run()
したがって、A と B からの IncomingConnection インスタンスを持つソースがあります。
今、私はそれらを何らかの方法で処理し、応答を生成し、対応する接続に応答を送信したいと考えています。
これらすべてをアーカイブするためのより良い方法があるかもしれませんが、ドキュメントや他の人からの質問でそのような問題を解決する例を見つけることができませんでした.
また、問題はかなり一般的だと思います。
よろしくお願いします。