akka.routing
Class ConsistentHashingRoutingLogic

java.lang.Object
  extended by akka.routing.ConsistentHashingRoutingLogic
All Implemented Interfaces:
NoSerializationVerificationNeeded, RoutingLogic, java.io.Serializable, scala.Equals, scala.Product

public final class ConsistentHashingRoutingLogic
extends java.lang.Object
implements RoutingLogic, scala.Product, scala.Serializable

Uses consistent hashing to select a routee based on the sent message.

There is 3 ways to define what data to use for the consistent hash key.

1. You can define hashMapping / withHashMapper of the router to map incoming messages to their consistent hash key. This makes the decision transparent for the sender.

2. The messages may implement ConsistentHashingRouter.ConsistentHashable. The key is part of the message and it's convenient to define it together with the message definition.

3. The messages can be be wrapped in a ConsistentHashingRouter.ConsistentHashableEnvelope to define what data to use for the consistent hash key. The sender knows the key to use.

These ways to define the consistent hash key can be use together and at the same time for one router. The hashMapping is tried first.

See Also:
Serialized Form

Constructor Summary
ConsistentHashingRoutingLogic(ActorSystem system)
          Java API
ConsistentHashingRoutingLogic(ActorSystem system, int virtualNodesFactor, scala.PartialFunction<java.lang.Object,java.lang.Object> hashMapping)
           
 
Method Summary
static Address defaultAddress(ActorSystem system)
          Address to use for the selfAddress parameter
 scala.PartialFunction<java.lang.Object,java.lang.Object> hashMapping()
           
 Routee select(java.lang.Object message, scala.collection.immutable.IndexedSeq<Routee> routees)
          Pick the destination for a given message.
 ActorSystem system()
           
 int virtualNodesFactor()
           
 int vnodes()
           
 ConsistentHashingRoutingLogic withHashMapper(ConsistentHashingRouter.ConsistentHashMapper mapper)
          Java API: Setting the mapping from message to the data to use for the consistent hash key.
 ConsistentHashingRoutingLogic withVirtualNodesFactor(int vnodes)
          Setting the number of virtual nodes per node, used in ConsistentHash
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface scala.Product
productArity, productElement, productIterator, productPrefix
 
Methods inherited from interface scala.Equals
canEqual, equals
 

Constructor Detail

ConsistentHashingRoutingLogic

public ConsistentHashingRoutingLogic(ActorSystem system,
                                     int virtualNodesFactor,
                                     scala.PartialFunction<java.lang.Object,java.lang.Object> hashMapping)

ConsistentHashingRoutingLogic

public ConsistentHashingRoutingLogic(ActorSystem system)
Java API

Parameters:
system - the actor system hosting this router
Method Detail

defaultAddress

public static Address defaultAddress(ActorSystem system)
Address to use for the selfAddress parameter


system

public ActorSystem system()

virtualNodesFactor

public int virtualNodesFactor()

hashMapping

public scala.PartialFunction<java.lang.Object,java.lang.Object> hashMapping()

vnodes

public int vnodes()

withVirtualNodesFactor

public ConsistentHashingRoutingLogic withVirtualNodesFactor(int vnodes)
Setting the number of virtual nodes per node, used in ConsistentHash


withHashMapper

public ConsistentHashingRoutingLogic withHashMapper(ConsistentHashingRouter.ConsistentHashMapper mapper)
Java API: Setting the mapping from message to the data to use for the consistent hash key.


select

public Routee select(java.lang.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 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