public class ConsistentHash extends Object
A ConsistentHash is used to route commands targeting the same aggregate to the same member. In that case the aggregate identifier is the routing key.
Modifier and Type | Class and Description |
---|---|
static class |
ConsistentHash.ConsistentHashMember
Member implementation used by a
ConsistentHash registry. |
Constructor and Description |
---|
ConsistentHash()
Initializes a new
ConsistentHash . |
ConsistentHash(Function<String,String> hashFunction)
Initializes a new
ConsistentHash using the given hashFunction to calculate positions for each
member on the ring. |
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object o) |
Collection<ConsistentHash.ConsistentHashMember> |
getEligibleMembers(String routingKey)
Returns the collection of nodes, represented as
ConsistentHash.ConsistentHashMember , in the order they would be
considered for the given routing key. |
Optional<Member> |
getMember(String routingKey,
CommandMessage<?> commandMessage)
Returns the member instance to which the given
message should be routed. |
Set<Member> |
getMembers()
Returns the set of members registered with this consistent hash instance.
|
protected static String |
hash(String routingKey)
Returns the hash of the given
routingKey . |
int |
hashCode() |
String |
toString() |
int |
version()
Returns the version of this consistent hash instance.
|
ConsistentHash |
with(Member member,
int loadFactor,
Predicate<? super CommandMessage<?>> commandFilter)
Registers the given
member with given loadFactor and commandFilter if it is not
already contained in the ConsistentHash . |
ConsistentHash |
without(Member member)
Deregisters the given
member and returns a new ConsistentHash with updated memberships. |
public ConsistentHash()
ConsistentHash
. To register members use with(Member, int, Predicate)
.public ConsistentHash(Function<String,String> hashFunction)
ConsistentHash
using the given hashFunction
to calculate positions for each
member on the ring. To register members use with(Member, int, Predicate)
.hashFunction
- The hash function to use to calculate each member's positions on the ringprotected static String hash(String routingKey)
routingKey
. By default this creates a MD5 hash with hex encoding.routingKey
- the routing key to hashpublic Collection<ConsistentHash.ConsistentHashMember> getEligibleMembers(String routingKey)
ConsistentHash.ConsistentHashMember
, in the order they would be
considered for the given routing key. Whether a CommandMessage would be forwarded to each of the candidates,
depends on the Command Filter of each node.routingKey
- The routing key to select orderingpublic Optional<Member> getMember(String routingKey, CommandMessage<?> commandMessage)
message
should be routed. If no suitable member could be
found an empty Optional is returned.routingKey
- the routing that should be used to select a membercommandMessage
- the command message to find a member forpublic Set<Member> getMembers()
public ConsistentHash with(Member member, int loadFactor, Predicate<? super CommandMessage<?>> commandFilter)
member
with given loadFactor
and commandFilter
if it is not
already contained in the ConsistentHash
. It will return the current ConsistentHash if the addition is
a duplicate and returns a new ConsistentHash with updated memberships if it is not.
The relative loadFactor of the member determines the likelihood of being selected as a destination for a command.
member
- the member to registerloadFactor
- the load factor of the new membercommandFilter
- filter describing which commands can be handled by the given memberConsistentHash
instance with updated membershipspublic ConsistentHash without(Member member)
member
and returns a new ConsistentHash
with updated memberships.member
- the member to remove from the consistent hashConsistentHash
instance with updated membershipspublic int version()
Copyright © 2010–2018. All rights reserved.