REST 要求を受信し、データベースに対していくつかの操作を行い、クライアントにいくつかの情報で応答する Akka を使用する Scala アプリケーションがあります。現状では、DB に対して多くの操作を同時に実行できたとしても、DB 操作には長い時間がかかり、その間、REST 対応のアクターは新しい要求に応答できません。アクターで REST 対応メソッドに javax.ws.rs アノテーションを使用しています。
質問; アプリケーションが多数の同時リクエストを処理できるようにする最善の方法は何ですか?
編集:サンプルコードを追加します。
import se.scalablesolutions.akka.actor._
import javax.ws.rs._
@Path("/test")
class TestService {
@GET
def status() =
actorPool !! Status(session).
getOrElse(<error>Unable to connect to service</error>)
}
class TestActor {
def receive = {
case Status() => {
reply(SomeObject.slowDBMethod)
}
}
}
case class Status()
EDIT2:これは私がログに記録しているものです。タブを切り替えて F5 キーを押すのと同じ速さでブラウザーから 3 つの要求を送信していますが、RS Bean は最初の要求が完了するのを待ってから次の要求を処理します。
[INFO] [2010-08-29 16:27:03,232] [akka:event-driven:dispatcher:global-15] c.n.StatusActor: got Slow request
[INFO] [2010-08-29 16:27:06,916] [akka:event-driven:dispatcher:global-10] c.n.StatusActor: got Slow request
[INFO] [2010-08-29 16:27:10,589] [akka:event-driven:dispatcher:global-3] c.n.StatusActor: got Slow request