2010-11-18 37 views
0

J'essaye d'aller chercher le message de la file d'attente de RabbitMq mais seulement la première fois il me donne le compte de message et alors il ne me donne aucun compte. acteur.Tout type d'aide sera apprécié.RabbitMQ une seule fois obtenir le nombre de messages de la file d'attente

Code

comme suit

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

Mon code devient en boucle infinie à cette ligne conn = FACTORY.newConnection quand il y aller une deuxième fois.

+1

Pourquoi vous envelopper la file d'attente en tant qu'acteur? Serait-ce un fil qui envoie les messages à d'autres acteurs? – Thomas

Répondre

1

Disclaimer: Je suis le bon de commande de Akka

Je vous recommande de jeter un oeil à des acteurs de Akka, a obtenu un DSL lisse sur le dessus de AMQP que je pense que vous pourriez bénéficier de:

http://doc.akkasource.org/amqp une autre alternative est de consommer les messages via Camel (si votre bateau qui flotte):

http://doc.akkasource.org/camel