public IBusControl Create()
        {
            var busControl = _messageBusFactory.Create();
            var retryCount = 0;
            var retryLimit = _rabbitMqHostConfiguration.RetryLimit;
            var delayInSecondsBetweenRetries = _rabbitMqHostConfiguration.DelayInSecondsBetweenRetries;
            var started = false;

            while (retryCount < retryLimit && !started)
            {
                try
                {
                    _logger.Info("Starting bus...");
                    busControl.Start();
                    started = true;
                }
                catch (MassTransit.RabbitMqTransport.RabbitMqConnectionException)
                {
                    _logger.Error(
                        $"Failed to connect (attempt {retryCount + 1} of {retryLimit}). Will try again in {delayInSecondsBetweenRetries} seconds.");
                    Thread.Sleep(delayInSecondsBetweenRetries * 1000);
                    retryCount++;
                    busControl = _messageBusFactory.Create(); // calling Start() more than once causes a MassTransitException, so create a new instance for next iteration instead.
                }
            }

            if (!started)
            {
                var message = "Reached retry limit trying to connect to RabbitMQ. Service stopping.";
                _logger.Error(message);
                throw new Exception(message);
            }

            return(busControl);
        }
예제 #2
0
 public void SetUp()
 {
     _busControl        = Substitute.For <IBusControl>();
     _messageBusFactory = Substitute.For <IMessageBusFactory>();
     _messageBusFactory.Create().Returns(_busControl);
     _eventProjectingService = new EventProjectingService(_messageBusFactory);
 }
 public void SetUp()
 {
     _busControl        = Substitute.For <IBusControl>();
     _messageBusFactory = Substitute.For <IMessageBusFactory>();
     _messageBusFactory.Create().Returns(_busControl);
     _outboxToMessageBusPublisher = Substitute.For <IOutboxToMessageBusPublisher>();
     _waiterCommandService        = new WaiterCommandService(_busControl, _outboxToMessageBusPublisher);
 }
예제 #4
0
        public OrderPrintingMessageBusClient(
            IMessageBusFactory<OrderPrintingMessage> messageBusFactory)
        {
            var configManager = new MessageBusConfigManager(
                MessageBusPurposeNames.OrderPrinting,
                ParameterHelper.MessageBusHostAddress);

            configManager.UserNameForConnection = ParameterHelper.MessageBusUserName;
            configManager.PasswordForConnection = ParameterHelper.MessageBusPassword;

            configManager.ExchangeType = MessageBusExchangeType.Topic;
            configManager.PerQueueMessageTimeToLiveInMinutes = QueueMessageTimeToLiveInMinutes;
            configManager.QueueBindingPrefix = ParameterHelper.MessageBusQueueBindingPrefix;
            configManager.SubscriberShouldLogMessageDetails = true;

            configManager.QueueBindings.Add(new MessageBusQueueBinding(
                MessageBusQueueNames.OrderSubmitted,
                MessageBusRoutingKeys.OrderSubmitted));

            _messageBus = messageBusFactory.Create(configManager,
                UnityHelper.Current.Resolve<MessageBusLogger>());
        }