私のモデルには、約8〜9個のScalaアクタがあります。 各アクターは、いくつかのScalaアクタが同時に実行しているときに8-10人のアクタが待機状態になる
各アクターの行為の方法で.IT連続
def act {
this ! 1
loop {
react {
case 1 => processMessage(QManager.getMessage); this ! 1
}
}
}
I RabbitMQのQManagerのgetMessageメソッド
def getMessage: MyObject = {
getConnection
val durable = true
channel.exchangeDeclare(EXCHANGE, "direct", durable)
channel.queueDeclare(QUEUE, durable, false, false, null)
channel queueBind (QUEUE, EXCHANGE, _ROUTING_KEY)
consumer = new QueueingConsumer(channel)
channel basicConsume (QUEUE, false, consumer)
var obj = new MyObject
try {
val delivery = consumer.nextDelivery
val msg = new java.io.ObjectInputStream(
new java.io.ByteArrayInputStream(delivery.getBody)).readObject()
obj = msg.asInstanceOf[MyObject]
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false)
} catch {
case e: Exception =>logger.error("error in Get Message", e);endConnection
}
endConnection
obj
}
ようキュー にリストアップされたのRabbitMQサーバー上の独自のキューを持っていますすべての9人のアクターは、独自のオブジェクトタイプと独自のQManagerを持っています
GetMessageで私はRabbitmq QueueConsu私は彼らの唯一の4は、他には記載しておりません正常に動作し、すべての8人の俳優を起動したときにキュー 、この方法ではitfounds状態
待機中の俳優を置くとき
val delivery = consumer.nextDelivery
マー
とnextDeliveryメソッドは、オブジェクトを返します。私は4人の役者は、Scalaのアクターのスレッドに問題がthererであることがより開始したとき アローン
問題を始めたとき、私はテスト一人ひとりの俳優が稼働して相まって、彼らが正常に動作していが発生します。
Akkaリンクありがとう –