Beispiel #1
0
        public static async Task <EventHubsConnectionStringBuilder> GetEventHubConnectionStringBuilder(string sectionName, Action <string> onFailure, CancellationToken ct)
        {
            var configuration = new FabricConfigurationProvider(sectionName);

            if (!configuration.HasConfiguration)
            {
                await configuration.RejectConfigurationAsync($"No {sectionName} section", onFailure, ct).ConfigureAwait(false);

                return(null);
            }
            try
            {
                var endpointAddress = await configuration.TryReadConfigurationAsync("EndpointAddress", onFailure, ct).ConfigureAwait(false);

                var builder = new EventHubsConnectionStringBuilder(
                    new Uri($"amqps://{endpointAddress}"),
                    await configuration.TryReadConfigurationAsync("EntityPath", onFailure, ct).ConfigureAwait(false),
                    await configuration.TryReadConfigurationAsync("SharedAccessKeyName", onFailure, ct).ConfigureAwait(false),
                    await configuration.TryReadConfigurationAsync("SharedAccessKey", onFailure, ct).ConfigureAwait(false)
                    );
                return(builder);
            }
            catch (Exception ex)
            {
                ct.ThrowIfCancellationRequested();
#pragma warning disable ERP023 // Only ex.Message property was observed in exception block!
                await configuration.RejectConfigurationAsync($"Exception creating connection string builder: {ex.Message}", onFailure, ct).ConfigureAwait(false);

#pragma warning restore ERP023 // Only ex.Message property was observed in exception block!
                return(null);
            }
        }
        protected virtual async Task <Configuration> TryConfigureAsync(CancellationToken ct)
        {
            try
            {
                void onFailure(string msg) => Log.Error("Error configuring: {Msg}", msg);

                var client = await EventHubConfiguration.GetEventHubClientAsync(ConfigurationSectionName, onFailure, ct).ConfigureAwait(false);

                var configuration = new FabricConfigurationProvider(ConfigurationSectionName);
                var consumerGroup = await configuration.TryReadConfigurationAsync("ConsumerGroup", onFailure, ct).ConfigureAwait(false);

                var partitions = await GetPartitionsAsync(client).ConfigureAwait(false);

                var offsets = await StateManager.GetOrAddAsync <IReliableDictionary <string, string> >(OffsetsName).ConfigureAwait(false);

                return(new Configuration(client, consumerGroup, partitions, offsets));
            }
            catch (Exception ex)
            {
                ct.ThrowIfCancellationRequested();
                Log.Fatal(ex, "Error configuring event hubs: {Exception}", ex.Message);
                throw;
            }
        }