Beispiel #1
0
 public void Dispose()
 {
     _mockMerQurePublisher = null;
     _mockMessagingService = null;
     _publisher            = null;
     _retryStrategy        = null;
 }
Beispiel #2
0
        private RetryStrategyConfiguration GetValidConfigurationWithPublishingDelay()
        {
            RetryStrategyConfiguration configuration = GetMinimalValidConfiguration();

            configuration.DeliveryDelayInMilliseconds = 1000;
            return(configuration);
        }
Beispiel #3
0
 private void CreateMainExchange(RetryStrategyConfiguration configuration)
 {
     _messagingService.DeclareExchange(configuration.BusName, Constants.ExchangeTypeTopic);
     foreach (Channel channel in configuration.Channels)
     {
         _messagingService.DeclareQueue(channel.Value);
         _messagingService.DeclareBinding(configuration.BusName, channel.Value, $"{channel.Value}.#");
     }
 }
Beispiel #4
0
 private void CreateRetryChannelsForOneDelay(RetryStrategyConfiguration configuration, string retryExchangeName, int delay)
 {
     foreach (Channel channel in configuration.Channels)
     {
         string retryQueueName = $"{channel.Value}.{delay}";
         _messagingService.DeclareQueueWithDeadLetterPolicy(retryQueueName, configuration.BusName, delay, null);
         _messagingService.DeclareBinding(retryExchangeName, retryQueueName, $"{channel.Value}.{delay}", null);
     }
 }
Beispiel #5
0
        public IBus <T> CreateNewBus <T>(RetryStrategyConfiguration configuration) where T : IDelivered
        {
            ApplyNewConfiguration(configuration);

            Publisher <T>     producer = new Publisher <T>(_messagingService, configuration);
            RetryConsumer <T> consumer = new RetryConsumer <T>(_messagingService, configuration, producer);

            return(new Bus <T>(producer, consumer));
        }
Beispiel #6
0
        private RetryStrategyConfiguration GetValidConfigurationWithDelay()
        {
            RetryStrategyConfiguration configuration = GetMinimalValidConfiguration();

            configuration.DelaysInMsBetweenEachRetry = new List <int>
            {
                1000,
                2000
            };
            return(configuration);
        }
Beispiel #7
0
        private void CreateErrorExchange(RetryStrategyConfiguration configuration)
        {
            string errorExchangeName = $"{configuration.BusName}.{RetryStrategyConfiguration.ErrorExchangeSuffix}";

            _messagingService.DeclareExchange(errorExchangeName, Constants.ExchangeTypeDirect);
            foreach (Channel channel in configuration.Channels)
            {
                string errorQueueName = $"{channel.Value}.{RetryStrategyConfiguration.ErrorExchangeSuffix}";
                _messagingService.DeclareQueue(errorQueueName);
                _messagingService.DeclareBinding(errorExchangeName, errorQueueName, errorQueueName);
            }
        }
Beispiel #8
0
        private void ApplyNewConfiguration(RetryStrategyConfiguration configuration)
        {
            if (configuration.Channels == null || !configuration.Channels.Any())
            {
                throw new ArgumentNullException(nameof(configuration.Channels));
            }

            if (configuration.DelaysInMsBetweenEachRetry == null)
            {
                throw new ArgumentNullException(nameof(configuration.Channels));
            }

            CreateMainExchange(configuration);
            CreateRetryExchangeIfNecessary(configuration);
            CreateErrorExchange(configuration);
        }
Beispiel #9
0
        /// <summary>
        /// Retry exchange is also used to delivery message with delay
        /// </summary>
        private void CreateRetryExchangeIfNecessary(RetryStrategyConfiguration configuration)
        {
            if (configuration.DelaysInMsBetweenEachRetry.Any() || configuration.DeliveryDelayInMilliseconds != 0)
            {
                string retryExchangeName = $"{configuration.BusName}.{RetryStrategyConfiguration.RetryExchangeSuffix}";
                _messagingService.DeclareExchange(retryExchangeName, Constants.ExchangeTypeDirect);
                foreach (int delay in configuration.DelaysInMsBetweenEachRetry)
                {
                    CreateRetryChannelsForOneDelay(configuration, retryExchangeName, delay);
                }

                if (!configuration.DelaysInMsBetweenEachRetry.Contains(configuration.DeliveryDelayInMilliseconds) && configuration.DeliveryDelayInMilliseconds != 0)
                {
                    CreateRetryChannelsForOneDelay(configuration, retryExchangeName, configuration.DeliveryDelayInMilliseconds);
                }
            }
        }
Beispiel #10
0
        public SampleService(IRetryBusService retryBusService)
        {
            _retryBusService = retryBusService;

            RetryStrategyConfiguration sampleConfiguration = new RetryStrategyConfiguration
            {
                Channels = SampleChannels.GetAllChannels(),
                BusName  = BusName,
                DelaysInMsBetweenEachRetry = new List <int>
                {
                    { 5000 },
                    { 6000 },
                    { 10000 }
                },
                MessageIsGoingIntoErrorBusAfterAllRepeat = true,
                DeliveryDelayInMilliseconds = 1000
            };

            SampleBus = _retryBusService.CreateNewBus <Sample>(sampleConfiguration);
        }
Beispiel #11
0
        public PublisherTests()
        {
            _mockMerQurePublisher = new Mock <IPublisher>();
            _mockMessagingService = new Mock <IMessagingService>();

            _retryStrategy = new RetryStrategyConfiguration()
            {
                BusName  = "testBus",
                Channels = new List <Channel>()
                {
                    new Channel("testChannel")
                },
                DelaysInMsBetweenEachRetry = new List <int>()
                {
                    1000,
                    2000
                },
                DeliveryDelayInMilliseconds = 0,
                MessageIsGoingIntoErrorBusAfterAllRepeat = false
            };

            _publisher = new Publisher <TestMessage>(_mockMessagingService.Object, _retryStrategy);
        }
Beispiel #12
0
 public Publisher(IMessagingService messagingService, RetryStrategyConfiguration retryConfiguration)
 {
     _messagingService           = messagingService;
     _messageBrokerConfiguration = retryConfiguration;
 }
Beispiel #13
0
 public RetryConsumer(IMessagingService messagingService, RetryStrategyConfiguration retryConfiguration, Publisher <T> producer) : base(messagingService)
 {
     _retryConfiguration = retryConfiguration;
     _producer           = producer;
 }