2010-11-18 16 views
0

RabbitMqのキューからメッセージを取得しようとしていますが、最初にメッセージカウントを与えてからカウントを与えません。スカラ言語を使用しています。どんな種類の助けにも感謝します。RabbitMQは一度だけキューからメッセージ数を取得する

コード、それはそこに二度目に行くとき私のコードは、でCONN = FACTORY.newConnectionこのラインで無限ループになっている

 def act { 
loop { 
    FACTORY = new ConnectionFactory() 
    //  println("loop") 
    FACTORY.setUsername("guest") 
    FACTORY.setPassword("guest") 
    FACTORY.setVirtualHost("/") 
    FACTORY.setPort(5672) 
    FACTORY.setHost("localhost") 
    **conn = FACTORY.newConnection** 
    QUEUE_CHANNEL = conn.createChannel 
    QUEUE_CHANNEL.exchangeDeclare(EXCHANGE_NAME, "direct", durable) 

    var no = QUEUE_CHANNEL.queueDeclare(QUEUE_NAME, durable,  false,false,null).getMessageCount 
    println("calling to main Q" + no) 
    QUEUE_CHANNEL.queueBind(QUEUE_NAME, EXCHANGE_NAME, QUEUE_ROUTING_KEY) 
    if (no > 0) { 
    println("calling to main Q" + no) 
    getQ 
    } 
} 
} 

    def getQ { 
    try { 
    println("gettng main q") 
    val consumer = new QueueingConsumer(QUEUE_CHANNEL) 
    QUEUE_CHANNEL basicConsume (QUEUE_NAME, false, consumer) 
    val delivery = consumer.nextDelivery 
    val msg = new java.io.ObjectInputStream(
    new java.io.ByteArrayInputStream(delivery.getBody)).readObject 
    var obj = msg.asInstanceOf[QueueObject] 
    QUEUE_CHANNEL.basicAck(delivery.getEnvelope().getDeliveryTag, false) 
    //println(obj.status) 
    if (obj != null) 
    add(obj) //add to particular queue 
} catch { 
    case e: InterruptedException => println(e) 
} 
} 

を次のように。

+1

は、なぜあなたは俳優としてキューをラップしていますか?それは他のアクターにメッセージを送信するスレッドですか? – Thomas

答えて

1

免責事項:

:私はアッカ

のPOよ、私はあなたから利益を得ることができると思いますAMQPの上に滑らかなDSLを持っている、アッカに俳優を見てすることができお勧めします

http://doc.akkasource.org/amqp もう一つの選択肢は、(それがあなたのボートを浮遊している場合)キャメル経由でメッセージを消費することです:

http://doc.akkasource.org/camel

関連する問題