static void ConfigureLocalPartitionsChocolateShipping(EndpointConfiguration endpointConfiguration, PartitionsInformation partitionInfo) { endpointConfiguration.RegisterPartitionsForThisEndpoint( localPartitionKey: partitionInfo.LocalPartitionKey, allPartitionKeys: partitionInfo.Partitions); }
public static async Task <PartitionsInformation> QueryServicePartitions(Uri serviceName, Guid?partitionId = null) { using (var client = new FabricClient()) { var servicePartitionList = await client.QueryManager.GetPartitionListAsync(serviceName) .ConfigureAwait(false); var partitionInformations = servicePartitionList.Select(x => new { PartitionKey = x.PartitionInformation.Kind == ServicePartitionKind.Named ? ((NamedPartitionInformation)x.PartitionInformation).Name : ((Int64RangePartitionInformation)x.PartitionInformation).HighKey.ToString(), PartitionId = x.PartitionInformation.Id }).ToList(); var partitionInformation = new PartitionsInformation { LocalPartitionKey = partitionInformations.SingleOrDefault(p => p.PartitionId == partitionId)?.PartitionKey, Partitions = partitionInformations.Select(p => p.PartitionKey).ToArray() }; Logger.Log($"{serviceName} under partition {partitionId} uses { partitionInformation.LocalPartitionKey }. Found partitions: {string.Join("; ", partitionInformation.Partitions)}"); return(partitionInformation); } }
static void ConfigureReceiverSideDistributionShipOrder(TransportExtensions transportConfig, PartitionsInformation partitionInfo) { // TODO 11 var partitionKeysAsInts = partitionInfo.Partitions.Select(i => new { Key = i, AsInt = Convert.ToInt32(i) }).OrderBy(i => i.AsInt); var routing = transportConfig.Routing(); var receiverSideDistribution = routing.EnableReceiverSideDistribution(partitionInfo.Partitions); receiverSideDistribution.AddPartitionMappingForMessageType <ShipOrder>( mapMessageToPartitionKey: shipOrder => { var zipCodeAsNumber = Convert.ToInt32(shipOrder.ZipCode); int current = -1; foreach (var keys in partitionKeysAsInts) { var next = keys.AsInt; if (zipCodeAsNumber > current && zipCodeAsNumber <= next) { return(keys.Key); } current = next; } throw new Exception($"Invalid zip code '{zipCodeAsNumber}' for message of type '{shipOrder.GetType()}'."); }); }
static void ConfigureReceiverSideDistributionOrderShipped(TransportExtensions transportConfig, PartitionsInformation partitionInfo) { // TODO 10 var routing = transportConfig.Routing(); var receiverSideDistribution = routing.EnableReceiverSideDistribution(partitionInfo.Partitions); receiverSideDistribution.AddPartitionMappingForMessageType <OrderShipped>( mapMessageToPartitionKey: orderShipped => { var chocolateType = orderShipped.OrderId.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries)[0]; return(chocolateType); }); }
static void ConfigureReceiverSideDistributionCandidateVoteCount(TransportExtensions <AzureServiceBusTransport> transportConfig, PartitionsInformation partitionInfo) { #region ConfigureReceiverSideDistribution-CandidateVoteCount var routing = transportConfig.Routing(); var receiverSideDistribution = routing.EnableReceiverSideDistribution(partitionInfo.Partitions); receiverSideDistribution.AddPartitionMappingForMessageType <VotePlaced>( mapMessageToPartitionKey: votePlaced => { return(votePlaced.Candidate); }); #endregion }
static void ConfigureLocalPartitionsCandidateVoteCount(EndpointConfiguration endpointConfiguration, PartitionsInformation partitionInfo) { endpointConfiguration.RegisterPartitionsForThisEndpoint( localPartitionKey: partitionInfo.LocalPartitionKey, allPartitionKeys: partitionInfo.Partitions); }