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()}'.");
            });
        }
Esempio n. 4
0
        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);
            });
        }
Esempio n. 5
0
    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
    }
Esempio n. 6
0
 static void ConfigureLocalPartitionsCandidateVoteCount(EndpointConfiguration endpointConfiguration, PartitionsInformation partitionInfo)
 {
     endpointConfiguration.RegisterPartitionsForThisEndpoint(
         localPartitionKey: partitionInfo.LocalPartitionKey,
         allPartitionKeys: partitionInfo.Partitions);
 }