В моей модели около 8-9 актеров Scala.
Каждый актер имеет свою очередь на RabbitMQ Server
в методе действия каждого Актера. Он постоянно выводится в очередь
как
def act {
this ! 1
loop {
react {
case 1 => processMessage(QManager.getMessage); this ! 1
}
}
}
Я метод кролика MQ 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
}
Все 9 актеров имеют свой собственный тип объекта и собственный QManager
в GetMessage я использую Rabbitmq QueueConsumer
val delivery = consumer.nextDelivery
и метод nextDelivery возвращает объект, когда он находится в очереди
этот метод переводит актера в состояние ожидания
когда я запускаю все 8 актеров, только 4 из них работают нормально, другие не указаны.
Я проверил каждого актера, работающего независимо друг от друга, они отлично работают при запуске Alone
Проблема возникает, когда я начинаю больше, чем 4 актера
Есть ли какие-либо проблемы с потоками актеров скалы?