Class ClusterSingletonProxy
- java.lang.Object
-
- org.apache.pekko.cluster.singleton.ClusterSingletonProxy
-
- All Implemented Interfaces:
Actor
,ActorLogging
public final class ClusterSingletonProxy extends java.lang.Object implements Actor, ActorLogging
TheClusterSingletonProxy
works together with thepekko.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 itspekko.actor.ActorIdentity
.Note that this is a best effort implementation: messages can always be lost due to the distributed nature of the actors involved.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.pekko.actor.Actor
Actor.emptyBehavior$, Actor.ignoringBehavior$
-
-
Constructor Summary
Constructors Constructor Description ClusterSingletonProxy(java.lang.String singletonManagerPath, ClusterSingletonProxySettings settings)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
add(Member m)
Adds new member if it has the right role.scala.math.Ordering<Member>
ageOrdering()
MessageBuffer
buffer()
void
buffer(java.lang.Object msg)
void
buffer_$eq(MessageBuffer x$1)
void
cancelTimer()
Cluster
cluster()
ActorContext
context()
Scala API: Stores the context for this actor, including self, and sender.java.lang.String
createIdentifyId(int i)
void
handleInitial(ClusterEvent.CurrentClusterState state)
int
identifyCounter()
void
identifyCounter_$eq(int x$1)
java.lang.String
identifyId()
void
identifyId_$eq(java.lang.String x$1)
void
identifySingleton()
Discard old singleton ActorRef and send a periodic message to self to identify the singleton.scala.Option<Cancellable>
identifyTimer()
void
identifyTimer_$eq(scala.Option<Cancellable> x$1)
boolean
matchingRole(Member member)
scala.collection.immutable.SortedSet<Member>
membersByAge()
void
membersByAge_$eq(scala.collection.immutable.SortedSet<Member> x$1)
protected void
org$apache$pekko$actor$Actor$_setter_$context_$eq(ActorContext x$1)
Scala API: Stores the context for this actor, including self, and sender.protected void
org$apache$pekko$actor$Actor$_setter_$self_$eq(ActorRef x$1)
The 'self' field holds the ActorRef for this actor.void
postStop()
User overridable callback.void
preStart()
User overridable callback.static Props
props(java.lang.String singletonManagerPath, ClusterSingletonProxySettings settings)
Scala API: Factory method forClusterSingletonProxy
pekko.actor.Props
.scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit>
receive()
Scala API: This defines the initial actor behavior, it must return a partial function with the actor logic.void
remove(Member m)
Removes a member.ActorRef
self()
The 'self' field holds the ActorRef for this actor.void
sendBuffered()
scala.Option<ActorRef>
singleton()
void
singleton_$eq(scala.Option<ActorRef> x$1)
java.lang.String[]
singletonPath()
void
trackChange(scala.Function0<scala.runtime.BoxedUnit> block)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.pekko.actor.Actor
aroundPostRestart, aroundPostStop, aroundPreRestart, aroundPreStart, aroundReceive, postRestart, preRestart, sender, supervisorStrategy, unhandled
-
Methods inherited from interface org.apache.pekko.actor.ActorLogging
_log_$eq, log
-
-
-
-
Constructor Detail
-
ClusterSingletonProxy
public ClusterSingletonProxy(java.lang.String singletonManagerPath, ClusterSingletonProxySettings settings)
-
-
Method Detail
-
props
public static Props props(java.lang.String singletonManagerPath, ClusterSingletonProxySettings settings)
Scala API: Factory method forClusterSingletonProxy
pekko.actor.Props
.- Parameters:
singletonManagerPath
- The logical path of the singleton manager, e.g./user/singletonManager
, which ends with the name you defined inactorOf
when creating theClusterSingletonManager
.settings
- seeClusterSingletonProxySettings
-
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 asforward
.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 apekko.actor.AbstractActor.ActorContext
, which is the Java API of the actor context.
-
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
-
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 asforward
.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 apekko.actor.AbstractActor.ActorContext
, which is the Java API of the actor context.- Specified by:
org$apache$pekko$actor$Actor$_setter_$context_$eq
in interfaceActor
-
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 interfaceActor
-
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)
-
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.
-
postStop
public void postStop()
Description copied from interface:Actor
User overridable callback. Is called asynchronously after 'actor.stop()' is invoked. Empty default implementation.
-
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<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.
-
buffer
public void buffer(java.lang.Object msg)
-
sendBuffered
public void sendBuffered()
-
-