2010-11-18 4 views
0

Ich versuche, die Nachricht von den RabbitMQ Warteschlange aber nur erstes Mal, es gibt mir die Nachrichtenanzahl zu holen und dann ist es mir keine count.I geben scala Sprache verwenden und nutzt seine Schauspieler. Jede Art von Hilfe wird geschätzt.RabbitMQ nur einmal bekommt Nachrichtenanzahl aus der Warteschlange

Code wie folgt

 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) 
} 
} 

Mein Code wird an dieser Linie conn = FACTORY.newConnection in Endlosschleife bekommen, wenn es dort zweites Mal gehen.

+1

Warum sind Sie die Warteschlange als Schauspieler Einwickeln? Könnte das ein Thread sein, der die Nachrichten an andere Schauspieler sendet? – Thomas

Antwort

1

Disclaimer: Ich bin der PO von Akka

Ich würde Ihnen empfehlen, einen Blick auf Akteure in Akka zu haben, hat eine glatte DSL auf der AMQP, die ich glaube, Sie könnten profitieren von:

http://doc.akkasource.org/amqp eine weitere Alternative ist es, die Nachrichten über Camel zu konsumieren (wenn das Ihr Boot schwimmt):

http://doc.akkasource.org/camel

Verwandte Themen