47 lines
No EOL
1.9 KiB
Scala
47 lines
No EOL
1.9 KiB
Scala
package se.scalablesolutions.akka.amqp.test
|
|
|
|
import se.scalablesolutions.akka.util.Logging
|
|
import org.scalatest.junit.JUnitSuite
|
|
import se.scalablesolutions.akka.amqp.AMQP.{ConsumerParameters, ChannelParameters, ProducerParameters}
|
|
import org.multiverse.api.latches.StandardLatch
|
|
import se.scalablesolutions.akka.actor.Actor._
|
|
import org.scalatest.matchers.MustMatchers
|
|
import se.scalablesolutions.akka.amqp._
|
|
import org.junit.{After, Test}
|
|
import se.scalablesolutions.akka.actor.{ActorRegistry, ActorRef}
|
|
import java.util.concurrent.{CountDownLatch, TimeUnit}
|
|
|
|
class AMQPConsumerManualAcknowledgeTest extends JUnitSuite with MustMatchers with Logging {
|
|
|
|
// @Test
|
|
def consumerMessageManualAcknowledge = {
|
|
val connection = AMQP.newConnection()
|
|
try {
|
|
val countDown = new CountDownLatch(2)
|
|
val channelCallback = actor {
|
|
case Started => countDown.countDown
|
|
case Restarting => ()
|
|
case Stopped => ()
|
|
}
|
|
val channelParameters = ChannelParameters("text_exchange",ExchangeType.Direct, channelCallback = Some(channelCallback))
|
|
|
|
val acknowledgeLatch = new StandardLatch
|
|
var deliveryTagCheck: Long = -1
|
|
val consumer:ActorRef = AMQP.newConsumer(connection, ConsumerParameters(channelParameters, "manual.ack.this", actor {
|
|
case Delivery(payload, _, deliveryTag, _, sender) => {
|
|
deliveryTagCheck = deliveryTag
|
|
sender.foreach(_ ! Acknowledge(deliveryTag))
|
|
}
|
|
case Acknowledged(deliveryTag) => if (deliveryTagCheck == deliveryTag) acknowledgeLatch.open
|
|
}, selfAcknowledging = false))
|
|
|
|
val producer = AMQP.newProducer(connection, ProducerParameters(channelParameters))
|
|
countDown.await(2, TimeUnit.SECONDS) must be (true)
|
|
producer ! Message("some_payload".getBytes, "manual.ack.this")
|
|
|
|
acknowledgeLatch.tryAwait(2, TimeUnit.SECONDS) must be (true)
|
|
} finally {
|
|
connection.stop
|
|
}
|
|
}
|
|
} |