diff --git a/src/contrib/cluster/Akka.Cluster.Sharding/ShardRegion.cs b/src/contrib/cluster/Akka.Cluster.Sharding/ShardRegion.cs index 9c4a531a7f7..2aaa2ce40f3 100644 --- a/src/contrib/cluster/Akka.Cluster.Sharding/ShardRegion.cs +++ b/src/contrib/cluster/Akka.Cluster.Sharding/ShardRegion.cs @@ -579,6 +579,15 @@ private void ChangeMembers(IImmutableSet newMembers) /// protected override bool Receive(object message) { + // check hotpath first + // if user designed a greedy extractor this may cause problems. + var entityId = _messageExtractor.EntityId(message); + if (!string.IsNullOrEmpty(entityId)) + { + DeliverMessage(entityId!, message, Sender); + return true; + } + switch (message) { case Terminated t: @@ -606,16 +615,9 @@ protected override bool Receive(object message) DeliverRestartShard(restart, Sender); return true; default: - var entityId = _messageExtractor.EntityId(message); - if (entityId is null) - { - _log.Warning("{0}: Message does not have an extractor defined in shard so it was ignored: {1}", - _typeName, message); - return false; - } - - DeliverMessage(entityId, message, Sender); - return true; + _log.Warning("{0}: Message does not have an extractor defined in shard so it was ignored: {1}", + _typeName, message); + return false; } }