2016-03-29 3 views
7

任意の複合体Flow[HttpRequest, HttpResponse, Unit]を設定したとします。akka-http:フロー付きの完全リクエスト

私はすでに今、私は私の流れでこのディレクティブを結合する方法はありlogRequestResult("my-service"){...} のように、いくつかの既存のディレクティブを活用し、ロギングを追加したいフローが

Http().bindAndHandle(flow, "0.0.0.0", 8080) 

で着信要求を処理するために言った使用することができますか?私は別の指令を探していると思います。

def completeWithFlow(flow: Flow): Route 

これはまったく可能ですか?

N.B .: logRequestResultが例ですが、私の質問は役に立つと思われる任意のディレクティブに適用されます。

+0

なぜロギングはディレクティブによって提供される必要がありますか?なぜFlow.logを使用できないのですか? –

+0

はい、具体的な例ではFlow.logを使用できます。私の質問はもう少し包括的でした。私はすぐに使える指示を持っていれば、どうすれば私の文脈でそれを再利用できますか?のは、私が パス( "favicon.icoを")、以下のディレクティブを活用.favicon要求を処理したいとしましょう{ getFromResource( "favicon.icoを"、 '画像/ X-icon') } 私はなりたいです私の流れと組み合わせてこの指令を使うことができます。特定のパスを提供するために私のフローを使用し、/ faviconを提供するために上記の指示を使用してください。 –

答えて

4

は1をオン(そしておそらく唯一の)方法は、ワイヤと新しい流れを実体、およびそれに抽出された要求を供給することです。以下の例

val myFlow: Flow[HttpRequest, HttpResponse, NotUsed] = ??? 

    val route = 
    get { 
     logRequestResult("my-service") { 
     extract(_.request) { req ⇒ 
      val futureResponse = Source.single(req).via(myFlow).runWith(Sink.head) 
      complete(futureResponse) 
     } 
     } 
    } 

    Http().bindAndHandle(route, "127.0.0.1", 9000) 
0

http://doc.akka.io/docs/akka/2.4.2/scala/http/routing-dsl/overview.html

あなたはroute2HandlerFlowRoute.handlerFlowをお探しですか?

Route.handlerFlowimplicitに基づいて動作します。

例えば/

val serverBinding = Http().bindAndHandle(interface = "0.0.0.0", port = 8080, 
handler = route2HandlerFlow(mainFlow())) 
+0

ありがとう、私は実際に反対を探しています。 –

+1

:)誰かに助けになるのはいつも嬉しいです...多分 –

関連する問題