Class AdaptiveLoadBalancingRoutingLogic

java.lang.Object
org.apache.pekko.cluster.metrics.AdaptiveLoadBalancingRoutingLogic
All Implemented Interfaces:
Serializable, NoSerializationVerificationNeeded, RoutingLogic, scala.Equals, scala.Product

public final class AdaptiveLoadBalancingRoutingLogic extends Object implements RoutingLogic, NoSerializationVerificationNeeded, scala.Product, Serializable
Load balancing of messages to cluster nodes based on cluster metric data.

It uses random selection of routees based on probabilities derived from the remaining capacity of corresponding node.

param: system the actor system hosting this router

param: metricsSelector decides what probability to use for selecting a routee, based on remaining capacity as indicated by the node metrics

See Also:
  • Constructor Details

    • AdaptiveLoadBalancingRoutingLogic

      public AdaptiveLoadBalancingRoutingLogic(ActorSystem system, MetricsSelector metricsSelector)
  • Method Details

    • $lessinit$greater$default$2

      public static MetricsSelector $lessinit$greater$default$2()
    • apply

      public static AdaptiveLoadBalancingRoutingLogic apply(ActorSystem system, MetricsSelector metricsSelector)
    • apply$default$2

      public static MetricsSelector apply$default$2()
    • unapply

      public static scala.Option<scala.Tuple2<ActorSystem,MetricsSelector>> unapply(AdaptiveLoadBalancingRoutingLogic x$0)
    • system

      public ActorSystem system()
    • metricsSelector

      public MetricsSelector metricsSelector()
    • metricsChanged

      public final void metricsChanged(ClusterMetricsChanged event)
    • select

      public Routee select(Object message, scala.collection.immutable.IndexedSeq<Routee> routees)
      Description copied from interface: RoutingLogic
      Pick the destination for a given message. Normally it picks one of the passed routees, but in the end it is up to the implementation to return whatever pekko.routing.Routee to use for sending a specific message.

      When implemented from Java it can be good to know that routees.apply(index) can be used to get an element from the IndexedSeq.

      Specified by:
      select in interface RoutingLogic
    • copy

      public AdaptiveLoadBalancingRoutingLogic copy(ActorSystem system, MetricsSelector metricsSelector)
    • copy$default$1

      public ActorSystem copy$default$1()
    • copy$default$2

      public MetricsSelector copy$default$2()
    • productPrefix

      public String productPrefix()
      Specified by:
      productPrefix in interface scala.Product
    • productArity

      public int productArity()
      Specified by:
      productArity in interface scala.Product
    • productElement

      public Object productElement(int x$1)
      Specified by:
      productElement in interface scala.Product
    • productIterator

      public scala.collection.Iterator<Object> productIterator()
      Specified by:
      productIterator in interface scala.Product
    • canEqual

      public boolean canEqual(Object x$1)
      Specified by:
      canEqual in interface scala.Equals
    • productElementName

      public String productElementName(int x$1)
      Specified by:
      productElementName in interface scala.Product
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • equals

      public boolean equals(Object x$1)
      Specified by:
      equals in interface scala.Equals
      Overrides:
      equals in class Object