static void ConfigureSenderSideRoutingCandidateVoteCount(RoutingSettings <AzureServiceBusTransport> routing) { #region ConfigureSenderSideRouting-CandidateVoteCount var remotePartitions = new[] { "33000", "66000", "99000" }; Func <TrackZipCode, string> convertStringZipCodeToHighKey = message => { var zipCodeAsNumber = Convert.ToInt32(message.ZipCode); // 00000..33000 => 33000 33001..66000 => 66000 66001..99000 => 99000 if (zipCodeAsNumber >= 0 && zipCodeAsNumber <= 33000) { return("33000"); } if (zipCodeAsNumber > 33000 && zipCodeAsNumber <= 66000) { return("66000"); } if (zipCodeAsNumber > 66000 && zipCodeAsNumber <= 99000) { return("99000"); } throw new Exception($"Invalid zip code '{zipCodeAsNumber}' for message of type '{message.GetType()}'."); }; var senderSideDistribution = routing.RegisterPartitionedDestinationEndpoint( destinationEndpoint: "ZipCodeVoteCount", partitions: remotePartitions); senderSideDistribution.AddPartitionMappingForMessageType <TrackZipCode>( mapMessageToPartitionKey: trackZipCode => { return(convertStringZipCodeToHighKey(trackZipCode)); }); #endregion }