Adding tons of ScalaDocs for Mailbox.scala
This commit is contained in:
parent
72f12c89cd
commit
5ca3fe11f8
1 changed files with 44 additions and 5 deletions
|
|
@ -14,9 +14,15 @@ import akka.actor.ActorContext
|
||||||
import com.typesafe.config.Config
|
import com.typesafe.config.Config
|
||||||
import akka.actor.ActorSystem
|
import akka.actor.ActorSystem
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This exception normally is thrown when a bounded mailbox is over capacity
|
||||||
|
*/
|
||||||
class MessageQueueAppendFailedException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
|
class MessageQueueAppendFailedException(message: String, cause: Throwable = null) extends AkkaException(message, cause)
|
||||||
|
|
||||||
object Mailbox {
|
/**
|
||||||
|
* INTERNAL USE ONLY
|
||||||
|
*/
|
||||||
|
private[akka] object Mailbox {
|
||||||
|
|
||||||
type Status = Int
|
type Status = Int
|
||||||
|
|
||||||
|
|
@ -244,6 +250,10 @@ private[akka] abstract class Mailbox(val actor: ActorCell, val messageQueue: Mes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A MessageQueue is one of the core components in forming an Akka Mailbox.
|
||||||
|
* The MessageQueue is where the normal messages that are sent to Actors will be enqueued (and subsequently dequeued)
|
||||||
|
*/
|
||||||
trait MessageQueue {
|
trait MessageQueue {
|
||||||
/**
|
/**
|
||||||
* Try to enqueue the message to this queue, or throw an exception.
|
* Try to enqueue the message to this queue, or throw an exception.
|
||||||
|
|
@ -277,7 +287,7 @@ trait MessageQueue {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal mailbox implementation detail.
|
* INTERNAL USE ONLY
|
||||||
*/
|
*/
|
||||||
private[akka] trait SystemMessageQueue {
|
private[akka] trait SystemMessageQueue {
|
||||||
/**
|
/**
|
||||||
|
|
@ -294,7 +304,7 @@ private[akka] trait SystemMessageQueue {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal mailbox implementation detail.
|
* INTERNAL USE ONLY
|
||||||
*/
|
*/
|
||||||
private[akka] trait DefaultSystemMessageQueue { self: Mailbox ⇒
|
private[akka] trait DefaultSystemMessageQueue { self: Mailbox ⇒
|
||||||
|
|
||||||
|
|
@ -325,6 +335,9 @@ private[akka] trait DefaultSystemMessageQueue { self: Mailbox ⇒
|
||||||
def hasSystemMessages: Boolean = systemQueueGet ne null
|
def hasSystemMessages: Boolean = systemQueueGet ne null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A QueueBasedMessageQueue is a MessageQueue which is backed by a java.util.Queue
|
||||||
|
*/
|
||||||
trait QueueBasedMessageQueue extends MessageQueue {
|
trait QueueBasedMessageQueue extends MessageQueue {
|
||||||
def queue: Queue[Envelope]
|
def queue: Queue[Envelope]
|
||||||
def numberOfMessages = queue.size
|
def numberOfMessages = queue.size
|
||||||
|
|
@ -340,11 +353,18 @@ trait QueueBasedMessageQueue extends MessageQueue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnboundedMessageQueueSemantics adds the enqueue/dequeue operations for unbounded java.util.Queues
|
||||||
|
*/
|
||||||
trait UnboundedMessageQueueSemantics extends QueueBasedMessageQueue {
|
trait UnboundedMessageQueueSemantics extends QueueBasedMessageQueue {
|
||||||
def enqueue(receiver: ActorRef, handle: Envelope): Unit = queue add handle
|
def enqueue(receiver: ActorRef, handle: Envelope): Unit = queue add handle
|
||||||
def dequeue(): Envelope = queue.poll()
|
def dequeue(): Envelope = queue.poll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BoundedMessageQueueSemantics adds the enqueue/dequeue operations for bounded java.util.Queues,
|
||||||
|
* and it also forces the java.util.Queue to extend java.util.BlockingQueue
|
||||||
|
*/
|
||||||
trait BoundedMessageQueueSemantics extends QueueBasedMessageQueue {
|
trait BoundedMessageQueueSemantics extends QueueBasedMessageQueue {
|
||||||
def pushTimeOut: Duration
|
def pushTimeOut: Duration
|
||||||
override def queue: BlockingQueue[Envelope]
|
override def queue: BlockingQueue[Envelope]
|
||||||
|
|
@ -360,17 +380,27 @@ trait BoundedMessageQueueSemantics extends QueueBasedMessageQueue {
|
||||||
def dequeue(): Envelope = queue.poll()
|
def dequeue(): Envelope = queue.poll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DequeBasedMessageQueue forces the underlying java.util.Queue extend java.util.Deque
|
||||||
|
*/
|
||||||
trait DequeBasedMessageQueue extends QueueBasedMessageQueue {
|
trait DequeBasedMessageQueue extends QueueBasedMessageQueue {
|
||||||
def queue: Deque[Envelope]
|
def queue: Deque[Envelope]
|
||||||
def enqueueFirst(receiver: ActorRef, handle: Envelope): Unit
|
def enqueueFirst(receiver: ActorRef, handle: Envelope): Unit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UnboundedMessageQueueSemantics adds the enqueue/dequeue operations for unbounded java.util.Deque
|
||||||
|
*/
|
||||||
trait UnboundedDequeBasedMessageQueueSemantics extends DequeBasedMessageQueue {
|
trait UnboundedDequeBasedMessageQueueSemantics extends DequeBasedMessageQueue {
|
||||||
def enqueue(receiver: ActorRef, handle: Envelope): Unit = queue add handle
|
def enqueue(receiver: ActorRef, handle: Envelope): Unit = queue add handle
|
||||||
def enqueueFirst(receiver: ActorRef, handle: Envelope): Unit = queue addFirst handle
|
def enqueueFirst(receiver: ActorRef, handle: Envelope): Unit = queue addFirst handle
|
||||||
def dequeue(): Envelope = queue.poll()
|
def dequeue(): Envelope = queue.poll()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BoundedMessageQueueSemantics adds the enqueue/dequeue operations for bounded java.util.Deque,
|
||||||
|
* and it also forces the java.util.Queue to extend java.util.BlockingQueue
|
||||||
|
*/
|
||||||
trait BoundedDequeBasedMessageQueueSemantics extends DequeBasedMessageQueue {
|
trait BoundedDequeBasedMessageQueueSemantics extends DequeBasedMessageQueue {
|
||||||
def pushTimeOut: Duration
|
def pushTimeOut: Duration
|
||||||
override def queue: BlockingDeque[Envelope]
|
override def queue: BlockingDeque[Envelope]
|
||||||
|
|
@ -393,14 +423,14 @@ trait BoundedDequeBasedMessageQueueSemantics extends DequeBasedMessageQueue {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mailbox configuration.
|
* MailboxType is used to construct a Messagequeue given an optional ActorContext owner.
|
||||||
*/
|
*/
|
||||||
trait MailboxType {
|
trait MailboxType {
|
||||||
def create(owner: Option[ActorContext]): MessageQueue
|
def create(owner: Option[ActorContext]): MessageQueue
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* It's a case class for Java (new UnboundedMailbox)
|
* UnboundedMailbox is the standard issue Akka Mailbox as it is unbounded and has quite good performance
|
||||||
*/
|
*/
|
||||||
case class UnboundedMailbox() extends MailboxType {
|
case class UnboundedMailbox() extends MailboxType {
|
||||||
|
|
||||||
|
|
@ -412,6 +442,9 @@ case class UnboundedMailbox() extends MailboxType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BoundedMailbox is the default bounded mailbox
|
||||||
|
*/
|
||||||
case class BoundedMailbox( final val capacity: Int, final val pushTimeOut: Duration) extends MailboxType {
|
case class BoundedMailbox( final val capacity: Int, final val pushTimeOut: Duration) extends MailboxType {
|
||||||
|
|
||||||
def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"),
|
def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"),
|
||||||
|
|
@ -452,6 +485,9 @@ class BoundedPriorityMailbox( final val cmp: Comparator[Envelope], final val cap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the default mailbox for Deques, which is unbounded
|
||||||
|
*/
|
||||||
case class UnboundedDequeBasedMailbox() extends MailboxType {
|
case class UnboundedDequeBasedMailbox() extends MailboxType {
|
||||||
|
|
||||||
def this(settings: ActorSystem.Settings, config: Config) = this()
|
def this(settings: ActorSystem.Settings, config: Config) = this()
|
||||||
|
|
@ -462,6 +498,9 @@ case class UnboundedDequeBasedMailbox() extends MailboxType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the default mailbox for Deques, which is bounded
|
||||||
|
*/
|
||||||
case class BoundedDequeBasedMailbox( final val capacity: Int, final val pushTimeOut: Duration) extends MailboxType {
|
case class BoundedDequeBasedMailbox( final val capacity: Int, final val pushTimeOut: Duration) extends MailboxType {
|
||||||
|
|
||||||
def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"),
|
def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue