2017-07-16 4 views
1

私の使用例に合った例を探していますが、これまで見つかっていません。Akka-Httpのリクエスト本文を読み込み、各行を俳優のメッセージキューに送ります。

アクタの着信メッセージキューに各行を送信する、巨大なプレーンテキストリクエストボディを処理する必要のあるAkka WebServiceを作成しています。

ここにコードを書いてもらったり、サンプルページに私を向けることができますか?

私が実際に開始する場所から見当がつかない:私には大きな問題は、一般的にストリームを扱っている(私の場合、私はアッカ・ストリーミングライブラリを使用したい)

+0

"huge"を定義してください。一度にすべての要求をメモリに保持するには大きすぎますか? –

+0

それほど巨大ではありません...実際には、送信者がファイルサイズを制御できるので、巨大な場合はチャンクで送信できます。 – Max

答えて

2

を使用することができますリクエストボディを取得するにはextractRequestEntityあなたのルートを作成する指示。あなたは単にActorにテキストの各行を派遣することができ、エンティティ・ストリームたら:

import akka.stream.scaladsl.Framing.delimiter 
import akka.util.ByteString 
import akka.actor.ActorRef 
import akka.http.scaladsl.server.Directives.{extractRequestEntity, onComplete} 

val maxLineLength = 256 

val streamSplitter = delimiter(ByteString("\n"), maxLineLength) 

val actorRef : ActorRef = ??? //not specified in question 

val route : Route = 
    extractRequestEntity { entity => 

    onComplete { 
     entity 
     .dataBytes 
     .via(streamSplitter) 
     .map(_.utf8String) 
     .runForeach(line => actorRef ! line) 
    } { _ => 
     complete("all lines sent to actor") 
    } 
    } 

を質問応答は、単に上記の例ので、俳優処理の結果に依存しているかどうかを指定しません。その行をアクターに送り、単純なメッセージを含む応答で要求を完了します。

routeform the basis of a serverになります。

+0

私はそれを試していますが、 akka-http v10.0.9のコンパイルエラー:value viaはakka.http.scaladsl.model.RequestEntityのメンバーではありません。それに応じて – Max

+0

@ Maxが更新されました。 –

関連する問題