EventHubListenerLib.EventHubListenerOptions.ResolveAssignedEventHubPartitions C# (CSharp) Метод

ResolveAssignedEventHubPartitions() приватный Метод

private ResolveAssignedEventHubPartitions ( string EventHubPartitionsIds ) : string[]
EventHubPartitionsIds string
Результат string[]
        internal string[] ResolveAssignedEventHubPartitions(string[] EventHubPartitionsIds)
        {
            string[] orderedEventHubPartitionIds = EventHubPartitionsIds.OrderBy((s) => s).ToArray();


            switch (ListenerMode)
            {
                case EventHubListenerMode.Single:
                    {
                        if (!orderedEventHubPartitionIds.Contains(this.AssignedEventHubPartitionId))
                            throw new InvalidOperationException(string.Format("Assgined Event hub Partition {0} is not found", AssignedEventHubPartitionId));


                        return new string[] { this.AssignedEventHubPartitionId };
                    }
                case EventHubListenerMode.OneToOne:
                    {

                        if (OrderedServicePartitionIds.Length != orderedEventHubPartitionIds.Length)
                            throw new InvalidOperationException("Event Hub listener is in 1:1 mode yet servie partitions are not equal to event hub partitions");
                        int servicePartitionRank = Array.IndexOf(OrderedServicePartitionIds, mCurrentSFPartitionId);

                        return new string[] { orderedEventHubPartitionIds[servicePartitionRank] };
                    }
                case EventHubListenerMode.Distribute:
                    {
                        return DistributeOverServicePartitions(orderedEventHubPartitionIds);
                    }
                case EventHubListenerMode.SafeDistribute:
                    {
                        // we can work with service partitions < or = Event Hub partitions 
                        // anything else is an error case

                        if (OrderedServicePartitionIds.Length > orderedEventHubPartitionIds.Length)
                            throw new InvalidOperationException("Event Hub listener is in fairDistribute mode yet servie partitions greater than event hub partitions");


                        return DistributeOverServicePartitions(orderedEventHubPartitionIds);
                    }
                default:
                    {
                        throw new InvalidOperationException(string.Format("can not resolve event hub partition for {0}", this.ListenerMode.ToString()));
                    }
            }


            throw new InvalidOperationException("could not resolve event hub partitions");
        }
    

Usage Example

        /// <summary>
        ///  When called Event Hub receivers will be created and connect
        ///  to Event Hub to receive events.
        /// </summary>
        /// <returns></returns>
        public async Task StartAsync()
        {
            // slice the pie according to distribution
            // this partition can get one or more assigned Event Hub Partition ids
            string[] EventHubPartitionIds         = mEventHubClient.GetRuntimeInformation().PartitionIds;
            string[] ResolvedEventHubPartitionIds = mOptions.ResolveAssignedEventHubPartitions(EventHubPartitionIds);

            foreach (var resolvedPartition in ResolvedEventHubPartitionIds)
            {
                var rcver = new EventHubListenerPartitionReceiver(resolvedPartition, mOptions, mConsumerGroup);
                await rcver.StartAsync();

                mReceivers.Add(rcver);
            }
        }