9

私は、アクターによる同時実行の概念を使用して、プロトコルの要求/応答を実装する分散アーキテクチャを開発する方法について研究してきました。

これを行う最善の方法は、Futures/Promises の同期処理を備えた応答システムを作成し、応答の直後に通知を受信するためにチャネルを開いたままにすることであると結論付けました。

したがって、受信トレイ メッセージとまったく同じように機能するアーキテクチャです。

いくつかの問題があります。

したがって、2 つのエンドポイント (2 つのレイヤーのアクター) を維持する必要がありますか?

問題: ビュー モジュールは、特定の要素を処理するように要求します。彼女はこのコマンドを送信して、アプリケーション サーバー上の RemoteActor 経由で処理します。このサーバーは、要素が処理されたときに通知するという promise をすぐに返す必要があります。この後、ビューモジュールは処理完了の通知を待ちます。

この問題をどう見ていますか?

Scala、Akka、Google Guice を使用しています。

誰もが解決策を利用できるのは一般的な問題だと思います。もし私がstackoverflowサイトの条件を傷つけていたらすみません。

前もって感謝します

4

3 に答える 3

5

残念ながら私は Akka とその分散アクター機能についてあまり知らないので、Akka で得られる良い答えから気をそらしたくはありませんが、代替手段を検討したかどうかを尋ねたいと思います。

基本的に非同期 RPC ライブラリが必要なようです。私が知っている Scala で書かれた強力なライブラリが 2つあります。Finagle は、非同期計算の依存関係を表現し、future にリスナーを登録するための非常に強力なコンビネータを提供します。私は現在、LinkedIn で検索などの分散システムの一部に使用している Norbert を保守しています。

于 2011-06-09T21:43:00.350 に答える
4
//On "server" node
class SomeActor extends Actor {
  def receive = {
    case messageToRemoteActor => self reply_? TypeOfResponseMessage()
  }
}

Actor.remote.register("myRemoteActor", actorOf[SomeActor])

//On "client" node
val remoteActor = Actor.remote.actorFor("myRemoteActor", "hostnameOrIpOfNodeContainingTheActorAbove", port)

val f: Future[TypeOfResponseMessage] = remoteActor !!! messageToRemoteActor

f.onComplete( _.value.get match {
  case Left(exception) => handle(exception)
  case Right(result) => handle(result)
})
于 2011-06-09T22:25:56.443 に答える
1

0MQ の REQ-REP ソケットの 1 つだけを使用しないのはなぜですか?

https://github.com/zcox/akka-zeromq-java

そうすることで、差し迫った問題を解決すると同時に、多くの言語で書かれたクライアントとの通信をサポートし、長い道のりを歩むアーキテクチャを学び始めます。

これがどこにつながるかの例については、http://blog.getintheloop.eu/2009/05/22/lift-amqp-with-rabbitmq-and-scala-tutorial-and-screencast/ をご覧ください。

現在、AMQP を使用することをお勧めしているわけではないことに注意してください。RabbitMQ ブローカーは差し迫った問題に対してはやり過ぎになるからです。むしろ、長期的に利益をもたらすアーキテクチャ (メッセージ キューイング) を使用することに時間を投資することをお勧めします。

于 2011-06-18T05:02:19.670 に答える