Class ClusterSingletonProxy

java.lang.Object
org.apache.pekko.cluster.singleton.ClusterSingletonProxy
All Implemented Interfaces:
Actor, ActorLogging

public final class ClusterSingletonProxy extends Object implements Actor, ActorLogging
The ClusterSingletonProxy works together with the pekko.cluster.singleton.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 pekko.actor.Identify message until the singleton responds with its pekko.actor.ActorIdentity.

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

  • Constructor Details

  • Method Details

    • props

      public static Props props(String singletonManagerPath, ClusterSingletonProxySettings settings)
      Scala API: Factory method for ClusterSingletonProxy pekko.actor.Props.

      Parameters:
      singletonManagerPath - The logical path of the singleton manager, e.g. /user/singletonManager, which ends with the name you defined in actorOf when creating the ClusterSingletonManager.
      settings - see ClusterSingletonProxySettings
    • 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!

      pekko.actor.ActorContext is the Scala API. getContext returns a pekko.actor.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
    • org$apache$pekko$actor$Actor$_setter_$context_$eq

      protected void org$apache$pekko$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!

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

      Specified by:
      org$apache$pekko$actor$Actor$_setter_$context_$eq in interface Actor
    • org$apache$pekko$actor$Actor$_setter_$self_$eq

      protected final void org$apache$pekko$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:
      org$apache$pekko$actor$Actor$_setter_$self_$eq in interface Actor
    • singletonPath

      public String[] singletonPath()
    • identifyCounter

      public int identifyCounter()
    • identifyCounter_$eq

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

      public String identifyId()
    • identifyId_$eq

      public void identifyId_$eq(String x$1)
    • createIdentifyId

      public 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)
    • buffer

      public MessageBuffer buffer()
    • buffer_$eq

      public void buffer_$eq(MessageBuffer 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)
    • handleInitial

      public void handleInitial(ClusterEvent.CurrentClusterState state)
    • 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<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(Object msg)
    • sendBuffered

      public void sendBuffered()