HashSet<string> SelectDestinationsForEachEndpoint(IDistributionPolicy distributionPolicy, IEnumerable<Subscriber> subscribers)
{
//Make sure we are sending only one to each transport destination. Might happen when there are multiple routing information sources.
var addresses = new HashSet<string>();
var destinationsByEndpoint = subscribers
.GroupBy(d => d.Endpoint, d => d);
foreach (var group in destinationsByEndpoint)
{
if (group.Key == null) //Routing targets that do not specify endpoint name
{
//Send a message to each target as we have no idea which endpoint they represent
foreach (var subscriber in group)
{
addresses.Add(subscriber.TransportAddress);
}
}
else
{
var subscriber = distributionPolicy.GetDistributionStrategy(group.First().Endpoint, DistributionStrategyScope.Publish).SelectReceiver(group.Select(s => s.TransportAddress).ToArray());
addresses.Add(subscriber);
}
}
return addresses;
}