Added durable and auto-delete to AMQP
This commit is contained in:
parent
1f3a38228b
commit
48dff08848
3 changed files with 46 additions and 14 deletions
|
|
@ -179,11 +179,16 @@ object AMQP {
|
||||||
/**
|
/**
|
||||||
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
* @author <a href="http://jonasboner.com">Jonas Bonér</a>
|
||||||
*/
|
*/
|
||||||
case class MessageConsumerListener(queueName: String,
|
class MessageConsumerListener(val queueName: String,
|
||||||
routingKey: String,
|
val routingKey: String,
|
||||||
isUsingExistingQueue: Boolean,
|
val exclusive: Boolean,
|
||||||
actor: Actor) extends AMQPMessage {
|
val autoDelete: Boolean,
|
||||||
def this(queueName: String, routingKey: String, actor: Actor) = this (queueName, routingKey, false, actor)
|
val isUsingExistingQueue: Boolean,
|
||||||
|
val actor: Actor) extends AMQPMessage {
|
||||||
|
/**
|
||||||
|
* Creates a non-exclusive, non-autodelete message listener.
|
||||||
|
*/
|
||||||
|
def this(queueName: String, routingKey: String, actor: Actor) = this (queueName, routingKey, false, false, false, actor)
|
||||||
|
|
||||||
private[akka] var tag: Option[String] = None
|
private[akka] var tag: Option[String] = None
|
||||||
|
|
||||||
|
|
@ -192,6 +197,8 @@ object AMQP {
|
||||||
", queue=" + queueName +
|
", queue=" + queueName +
|
||||||
", routingKey=" + routingKey +
|
", routingKey=" + routingKey +
|
||||||
", tag=" + tag +
|
", tag=" + tag +
|
||||||
|
", exclusive=" + exclusive +
|
||||||
|
", autoDelete=" + autoDelete +
|
||||||
", isUsingExistingQueue=" + isUsingExistingQueue + "]"
|
", isUsingExistingQueue=" + isUsingExistingQueue + "]"
|
||||||
|
|
||||||
def toString(exchangeName: String) =
|
def toString(exchangeName: String) =
|
||||||
|
|
@ -200,6 +207,8 @@ object AMQP {
|
||||||
", queue=" + queueName +
|
", queue=" + queueName +
|
||||||
", routingKey=" + routingKey +
|
", routingKey=" + routingKey +
|
||||||
", tag=" + tag +
|
", tag=" + tag +
|
||||||
|
", exclusive=" + exclusive +
|
||||||
|
", autoDelete=" + autoDelete +
|
||||||
", isUsingExistingQueue=" + isUsingExistingQueue + "]"
|
", isUsingExistingQueue=" + isUsingExistingQueue + "]"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -223,8 +232,18 @@ object AMQP {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
object MessageConsumerListener {
|
object MessageConsumerListener {
|
||||||
def apply(queueName: String, routingKey: String, actor: Actor) =
|
def apply(queueName: String,
|
||||||
new MessageConsumerListener(queueName, routingKey, false, actor)
|
routingKey: String,
|
||||||
|
exclusive: Boolean,
|
||||||
|
autoDelete: Boolean,
|
||||||
|
isUsingExistingQueue: Boolean,
|
||||||
|
actor: Actor) =
|
||||||
|
new MessageConsumerListener(queueName, routingKey, exclusive, autoDelete, isUsingExistingQueue, actor)
|
||||||
|
|
||||||
|
def apply(queueName: String,
|
||||||
|
routingKey: String,
|
||||||
|
actor: Actor) =
|
||||||
|
new MessageConsumerListener(queueName, routingKey, false, false, false, actor)
|
||||||
}
|
}
|
||||||
|
|
||||||
case object Stop extends AMQPMessage
|
case object Stop extends AMQPMessage
|
||||||
|
|
@ -397,10 +416,14 @@ object AMQP {
|
||||||
private def registerListener(listener: MessageConsumerListener) = {
|
private def registerListener(listener: MessageConsumerListener) = {
|
||||||
log.debug("Register MessageConsumerListener %s", listener.toString(exchangeName))
|
log.debug("Register MessageConsumerListener %s", listener.toString(exchangeName))
|
||||||
listeners.put(listener, listener)
|
listeners.put(listener, listener)
|
||||||
|
|
||||||
if (!listener.isUsingExistingQueue) {
|
if (!listener.isUsingExistingQueue) {
|
||||||
log.debug("Declaring new queue for MessageConsumerListener [%s]", listener.queueName)
|
log.debug("Declaring new queue for MessageConsumerListener [%s]", listener.queueName)
|
||||||
channel.queueDeclare(listener.queueName)
|
channel.queueDeclare(
|
||||||
|
listener.queueName,
|
||||||
|
passive, durable,
|
||||||
|
listener.exclusive, listener.autoDelete,
|
||||||
|
configurationArguments.asJava)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.debug("Binding new queue for MessageConsumerListener [%s]", listener.queueName)
|
log.debug("Binding new queue for MessageConsumerListener [%s]", listener.queueName)
|
||||||
|
|
@ -508,6 +531,16 @@ object AMQP {
|
||||||
def createQueue(name: String, durable: Boolean) =
|
def createQueue(name: String, durable: Boolean) =
|
||||||
channel.queueDeclare(name, false, durable, true, true, null).getQueue
|
channel.queueDeclare(name, false, durable, true, true, null).getQueue
|
||||||
|
|
||||||
|
def createQueue(name: String, passive: Boolean, durable: Boolean, exclusive: Boolean, autoDelete: Boolean) =
|
||||||
|
channel.queueDeclare(name, passive, durable, exclusive, autoDelete, null).getQueue
|
||||||
|
|
||||||
|
def createQueue(name: String, passive: Boolean, durable: Boolean, exclusive: Boolean, autoDelete: Boolean, arguments: java.util.Map[String, AnyRef]) =
|
||||||
|
channel.queueDeclare(name, passive, durable, exclusive, autoDelete, arguments).getQueue
|
||||||
|
|
||||||
|
def bindQueue(name: String) {
|
||||||
|
channel.queueBind(name, exchangeName, name)
|
||||||
|
}
|
||||||
|
|
||||||
def createBindQueue: String = {
|
def createBindQueue: String = {
|
||||||
val name = createQueue
|
val name = createQueue
|
||||||
channel.queueBind(name, exchangeName, name)
|
channel.queueBind(name, exchangeName, name)
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,10 @@ object ActorRegistry extends Logging {
|
||||||
private val actorsByClassName = new HashMap[String, List[Actor]]
|
private val actorsByClassName = new HashMap[String, List[Actor]]
|
||||||
private val actorsById = new HashMap[String, List[Actor]]
|
private val actorsById = new HashMap[String, List[Actor]]
|
||||||
|
|
||||||
def actorsFor(clazz: Class[_ <: Actor]): List[Actor] = synchronized {
|
def actorsFor[T <: Actor](clazz: Class[T]): List[T] = synchronized {
|
||||||
actorsByClassName.get(clazz.getName) match {
|
actorsByClassName.get(clazz.getName) match {
|
||||||
case None => Nil
|
case None => Nil
|
||||||
case Some(instances) => instances
|
case Some(instances) => instances.asInstanceOf[List[T]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,8 +98,7 @@ class PubSub extends Actor {
|
||||||
* Or browse to the URL from a web browser.
|
* Or browse to the URL from a web browser.
|
||||||
*/
|
*/
|
||||||
@Path("/persistentscalacount")
|
@Path("/persistentscalacount")
|
||||||
class PersistentSimpleService extends Actor {
|
class PersistentSimpleService extends Transactor {
|
||||||
makeTransactionRequired
|
|
||||||
|
|
||||||
case object Tick
|
case object Tick
|
||||||
private val KEY = "COUNTER"
|
private val KEY = "COUNTER"
|
||||||
|
|
@ -125,7 +124,7 @@ class PersistentSimpleService extends Actor {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Path("/chat")
|
@Path("/chat")
|
||||||
class Chat extends Transactor {
|
class Chat extends Actor {
|
||||||
case class Chat(val who: String, val what: String, val msg: String)
|
case class Chat(val who: String, val what: String, val msg: String)
|
||||||
|
|
||||||
@Suspend
|
@Suspend
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue