Skip to content

Commit 1b6d84a

Browse files
Akka.Cluster.Hosting: don't use sharding delegates (#424)
laying the groundwork for akkadotnet/akka.net#6863 here - besides, it looks like the old delegates simply can't handle certain messages automatically due to akkadotnet/akka.net#7051
1 parent 9e4d1b1 commit 1b6d84a

File tree

1 file changed

+19
-26
lines changed

1 file changed

+19
-26
lines changed

src/Akka.Cluster.Hosting/AkkaClusterHostingExtensions.cs

+19-26
Original file line numberDiff line numberDiff line change
@@ -628,28 +628,6 @@ public static AkkaConfigurationBuilder WithClustering(
628628
return hoconBuilder.WithActorRefProvider(ProviderSelection.Cluster.Instance);
629629
}
630630

631-
private static ExtractEntityId ToExtractEntityId(this IMessageExtractor self)
632-
{
633-
Option<(string, object)> ExtractEntityId(object msg)
634-
{
635-
if (self.EntityId(msg) != null) return (self.EntityId(msg), self.EntityMessage(msg));
636-
637-
return Option<(string, object)>.None;
638-
}
639-
640-
return ExtractEntityId;
641-
}
642-
643-
private static ExtractShardId ToExtractShardId(this IMessageExtractor self)
644-
{
645-
string? ExtractShardId(object msg)
646-
{
647-
return self.EntityId(msg) != null ? self.ShardId(msg) : null;
648-
}
649-
650-
return ExtractShardId;
651-
}
652-
653631
public static AkkaConfigurationBuilder WithDistributedData(
654632
this AkkaConfigurationBuilder builder,
655633
Action<DDataOptions> configurator)
@@ -702,7 +680,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
702680
ShardOptions shardOptions)
703681
{
704682
return builder.WithShardRegion<TKey>(typeName, (_, _, _) => entityPropsFactory,
705-
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
683+
messageExtractor, shardOptions);
706684
}
707685

708686
/// <summary>
@@ -785,7 +763,7 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
785763
{
786764
return builder.WithShardRegion<TKey>(typeName,
787765
(system, registry, _) => entityPropsFactory(system, registry),
788-
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
766+
messageExtractor, shardOptions);
789767
}
790768

791769
/// <summary>
@@ -869,8 +847,23 @@ public static AkkaConfigurationBuilder WithShardRegion<TKey>(
869847
IMessageExtractor messageExtractor,
870848
ShardOptions shardOptions)
871849
{
872-
return builder.WithShardRegion<TKey>(typeName, entityPropsFactory,
873-
messageExtractor.ToExtractEntityId(), messageExtractor.ToExtractShardId(), shardOptions);
850+
shardOptions.Apply(builder);
851+
builder.AddHocon(
852+
ClusterSharding.DefaultConfig().WithFallback(DistributedData.DistributedData.DefaultConfig()),
853+
HoconAddMode.Append);
854+
855+
return builder.StartActors(Resolver);
856+
857+
async Task Resolver(ActorSystem system, IActorRegistry registry, IDependencyResolver resolver)
858+
{
859+
var props = entityPropsFactory(system, registry, resolver);
860+
var settings = ClusterShardingSettings.Create(system);
861+
var allocationStrategy = ClusterSharding.Get(system).DefaultShardAllocationStrategy(settings);
862+
var shardRegion = await ClusterSharding.Get(system).StartAsync(
863+
typeName, props, settings, messageExtractor, allocationStrategy,
864+
shardOptions.HandOffStopMessage ?? PoisonPill.Instance).ConfigureAwait(false);
865+
registry.Register<TKey>(shardRegion);
866+
}
874867
}
875868

876869
/// <summary>

0 commit comments

Comments
 (0)