コード例 #1
0
        public Task SendAsync <T>(T message) where T : new()
        {
            try
            {
                var topic = _settings.TopicNameBuilder(message.GetType());

                if (!_bindings.ContainsKey(topic))
                {
                    return(TryCreateBinding(topic, typeof(T), message, TriesBeforeInterval, TimeSpan.FromSeconds(IntervalOfBindingRetry)));
                }

                return(_bindings[topic].SendAsync(message));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "{method}: Failed to send async message '{message}' '{exceptionMessage}'{newLine}'{stackTrace}'", nameof(SendAsync), message, e.Message, Environment.NewLine, e.StackTrace);
                if (RetrySendMsgCount < maxSendAsyncRetries)
                {
                    RetrySendMsgCount++;
                    _logger.LogInformation("{method}: trying to send message again,  Trying to send message again '{sendCount}/{maxSendAsyncRetries}'", nameof(SendAsync), RetrySendMsgCount, maxSendAsyncRetries);
                    return(SendAsync(message));
                }
                else
                {
                    throw e;
                }
            }
        }
コード例 #2
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);
            }
コード例 #3
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);
                    }
                }));
            }