Class ClusterSingletonProxy

  • All Implemented Interfaces:
    Actor, ActorLogging

    public final class ClusterSingletonProxy
    extends java.lang.Object
    implements Actor, ActorLogging
    The ClusterSingletonProxy works together with the ClusterSingletonManager to provide a distributed proxy to the singleton actor.

    The proxy can be started on every node where the singleton needs to be reached and used as if it were the singleton itself. It will then act as a router to the currently running singleton instance. If the singleton is not currently available, e.g., during hand off or startup, the proxy will buffer the messages sent to the singleton and then deliver them when the singleton is finally available. The size of the buffer is configurable and it can be disabled by using a buffer size of 0. When the buffer is full old messages will be dropped when new messages are sent via the proxy.

    The proxy works by keeping track of the oldest cluster member. When a new oldest member is identified, e.g. because the older one left the cluster, or at startup, the proxy will try to identify the singleton on the oldest member by periodically sending an Identify message until the singleton responds with its ActorIdentity.

    Note that this is a best effort implementation: messages can always be lost due to the distributed nature of the actors involved.

    • Constructor Detail

    • Method Detail

      • context

        public ActorContext context()
        Description copied from interface: Actor
        Scala API: Stores the context for this actor, including self, and sender. It is implicit to support operations such as forward.

        WARNING: Only valid within the Actor itself, so do not close over it and publish it to other threads!

        ActorContext is the Scala API. getContext returns a AbstractActor.ActorContext, which is the Java API of the actor context.

        Specified by:
        context in interface Actor
      • self

        public final ActorRef self()
        Description copied from interface: Actor
        The 'self' field holds the ActorRef for this actor.

        Can be used to send messages to itself:
         self ! message
         
        Specified by:
        self in interface Actor
      • akka$actor$Actor$_setter_$context_$eq

        protected void akka$actor$Actor$_setter_$context_$eq​(ActorContext x$1)
        Description copied from interface: Actor
        Scala API: Stores the context for this actor, including self, and sender. It is implicit to support operations such as forward.

        WARNING: Only valid within the Actor itself, so do not close over it and publish it to other threads!

        ActorContext is the Scala API. getContext returns a AbstractActor.ActorContext, which is the Java API of the actor context.

        Specified by:
        akka$actor$Actor$_setter_$context_$eq in interface Actor
      • akka$actor$Actor$_setter_$self_$eq

        protected final void akka$actor$Actor$_setter_$self_$eq​(ActorRef x$1)
        Description copied from interface: Actor
        The 'self' field holds the ActorRef for this actor.

        Can be used to send messages to itself:
         self ! message
         
        Specified by:
        akka$actor$Actor$_setter_$self_$eq in interface Actor
      • singletonPath

        public java.lang.String[] singletonPath()
      • identifyCounter

        public int identifyCounter()
      • identifyCounter_$eq

        public void identifyCounter_$eq​(int x$1)
      • identifyId

        public java.lang.String identifyId()
      • identifyId_$eq

        public void identifyId_$eq​(java.lang.String x$1)
      • createIdentifyId

        public java.lang.String createIdentifyId​(int i)
      • identifyTimer

        public scala.Option<Cancellable> identifyTimer()
      • identifyTimer_$eq

        public void identifyTimer_$eq​(scala.Option<Cancellable> x$1)
      • cluster

        public Cluster cluster()
      • singleton

        public scala.Option<ActorRef> singleton()
      • singleton_$eq

        public void singleton_$eq​(scala.Option<ActorRef> x$1)
      • ageOrdering

        public scala.math.Ordering<Member> ageOrdering()
      • membersByAge

        public scala.collection.immutable.SortedSet<Member> membersByAge()
      • membersByAge_$eq

        public void membersByAge_$eq​(scala.collection.immutable.SortedSet<Member> x$1)
      • preStart

        public void preStart()
        Description copied from interface: Actor
        User overridable callback.

        Is called when an Actor is started. Actors are automatically started asynchronously when created. Empty default implementation.
        Specified by:
        preStart in interface Actor
      • postStop

        public void postStop()
        Description copied from interface: Actor
        User overridable callback.

        Is called asynchronously after 'actor.stop()' is invoked. Empty default implementation.
        Specified by:
        postStop in interface Actor
      • cancelTimer

        public void cancelTimer()
      • matchingRole

        public boolean matchingRole​(Member member)
      • identifySingleton

        public void identifySingleton()
        Discard old singleton ActorRef and send a periodic message to self to identify the singleton.
      • trackChange

        public void trackChange​(scala.Function0<scala.runtime.BoxedUnit> block)
      • add

        public void add​(Member m)
        Adds new member if it has the right role.
        Parameters:
        m - New cluster member.
      • remove

        public void remove​(Member m)
        Removes a member.
        Parameters:
        m - Cluster member to remove.
      • receive

        public scala.PartialFunction<java.lang.Object,​scala.runtime.BoxedUnit> receive()
        Description copied from interface: Actor
        Scala API: This defines the initial actor behavior, it must return a partial function with the actor logic.
        Specified by:
        receive in interface Actor
      • buffer

        public void buffer​(java.lang.Object msg)
      • sendBuffered

        public void sendBuffered()