Пример #1
0
            public void ReCreate(AzureBusTopicSettings settings, AzureBusTopicManagement queueManagement)
            {
                var topicName        = settings.TopicNameBuilder(typeof(T));
                var subscriptionName = $"{topicName}.{settings.TopicSubscriberId}";

                queueManagement.CreateSubscriptionIfMissing(topicName, subscriptionName, typeof(T));

                var subscriptionClient = new SubscriptionClient(settings.ConnectionString, topicName, subscriptionName);

                UpdateRules(subscriptionClient, settings);
            }
Пример #2
0
            internal Binding(AzureBusTopicSettings settings, ILogger <AzureTopicSubscriber> logging,
                             AzureBusTopicManagement queueManagement, BlockingCollection <IBinding> errorActions)
            {
                _excludeTopicsFromLogging = new LoggingConfiguration().ExcludeTopicsFromLogging();
                var topicName        = settings.TopicNameBuilder(typeof(T));
                var subscriptionName = $"{topicName}.{settings.TopicSubscriberId}";

                queueManagement.CreateSubscriptionIfMissing(topicName, subscriptionName, typeof(T));

                var subscriptionClient = new SubscriptionClient(settings.ConnectionString, topicName, subscriptionName);

                UpdateRules(subscriptionClient, settings);

                subscriptionClient.RegisterMessageHandler(
                    async(message, _) =>
                {
                    try
                    {
                        var body = Encoding.UTF8.GetString(message.Body);

                        if (!_excludeTopicsFromLogging.Contains(topicName))
                        {
                            logging.LogInformation("Received '{subscription}': {body} with Azure MessageId: '{messageId}'", subscriptionName, body, message.MessageId);
                        }

                        var asObject = AsObject(body);

                        Subject.OnNext(asObject);
                    }
                    catch (Exception ex)
                    {
                        logging.LogError(ex, "Message {subscription}': {message} -> consumer error: {exception}", subscriptionName, message, ex);
                    }
                }, new MessageHandlerOptions(async e =>
                {
                    logging.LogError(e.Exception, "At route '{subscription}' error occurred: {exception}.", subscriptionName, e.Exception);
                    if (e.Exception is ServiceBusCommunicationException || e.Exception is MessagingEntityNotFoundException)
                    {
                        errorActions.Add(this);
                    }
                }));
            }