Exemple #1
0
        public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher)
        {
            if (RabbitTunnel.Factory is DependencyInjectionTunnelFactory)
            {
                return(RabbitTunnel.Factory.Create(hostName, virtualHost, username, password, watcher));
            }

            var rabbitWatcher     = watcher ?? Global.DefaultWatcher;
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory
            {
                HostName    = hostName,
                VirtualHost = virtualHost,
                UserName    = username,
                Password    = password
            };

            var durableConnection = new DurableConnection(new DefaultRetryPolicy(), rabbitWatcher, connectionFactory);
            var errorHandler      = new ConsumerErrorHandler(connectionFactory, Global.DefaultSerializer, rabbitWatcher);

            var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, Global.DefaultSerializer, rabbitWatcher);
            var consumerManager   = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer);

            var tunnel = new RabbitTunnelWithPriorityQueuesSupport(consumerManager,
                                                                   rabbitWatcher,
                                                                   new DefaultRouteFinder(),
                                                                   durableConnection,
                                                                   Global.DefaultSerializer,
                                                                   Global.DefaultCorrelationIdGenerator,
                                                                   Global.DefaultPersistentMode);

            tunnel.AddSerializerObserver(errorHandler);
            tunnel.AddSerializerObserver(msgHandlerFactory);
            tunnel.AddSerializerObserver(consumerManager);
            return(tunnel);
        }
        public override ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher watcher)
        {
            var rabbitWatcher     = watcher ?? _burrowResolver.Resolve <IRabbitWatcher>() ?? Global.DefaultWatcher;
            var serializer        = _burrowResolver.Resolve <ISerializer>() ?? Global.DefaultSerializer;
            var connectionFactory = new RabbitMQ.Client.ConnectionFactory
            {
                HostName    = hostName,
                VirtualHost = virtualHost,
                UserName    = username,
                Password    = password
            };
            var durableConnection = new DurableConnection(_burrowResolver.Resolve <IRetryPolicy>() ?? new DefaultRetryPolicy(),
                                                          rabbitWatcher,
                                                          connectionFactory);

            var abc = new ObjectObserver <IObserver <ISerializer> >();

            Func <IConsumerErrorHandler> errorHandler = () =>
            {
                var handdler = new ConsumerErrorHandler(connectionFactory, serializer, rabbitWatcher);
                abc.FireEvent(handdler);
                return(handdler);
            };

            Func <IMessageHandlerFactory> handlerFactory = () =>
            {
                var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(),
                                                               serializer,
                                                               rabbitWatcher);
                abc.FireEvent(factory);
                return(factory);
            };


            Func <IConsumerManager> consumerManager = () =>
            {
                var manager = new ConsumerManager(rabbitWatcher,
                                                  _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(),
                                                  serializer);
                abc.FireEvent(manager);
                return(manager);
            };

            var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(),
                                          rabbitWatcher,
                                          _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(),
                                          durableConnection,
                                          serializer,
                                          _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            abc.ObjectCreated += tunnel.AddSerializerObserver;

            return(tunnel);
        }
Exemple #3
0
        public void Should_log_error_if_cannot_resolve_ConnectionFactory()
        {
            // Arrange
            var watcher = Substitute.For <IRabbitWatcher>();
            var handler = new ConsumerErrorHandler(() => null, Substitute.For <ISerializer>(), watcher);

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0]
            }, new Exception());

            // Assert
            watcher.Received().ErrorFormat(Arg.Any <string>(), Arg.Any <object[]>());
        }
        public void Should_catch_other_exceptions()
        {
            // Arrange
            var watcher           = Substitute.For <IRabbitWatcher>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.When(x => x.CreateChannel())
            .Do(callInfo => { throw new Exception("unexpecctedException"); });
            var handler = new ConsumerErrorHandler(durableConnection, Substitute.For <ISerializer>(), watcher);

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0]
            }, new Exception());

            // Assert
            watcher.Received().ErrorFormat(Arg.Any <string>(), Arg.Any <object[]>());
        }
        public void Should_catch_OperationInterruptedException()
        {
            // Arrange
            var watcher           = Substitute.For <IRabbitWatcher>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.When(x => x.CreateChannel())
            .Do(callInfo => { throw new OperationInterruptedException(new ShutdownEventArgs(ShutdownInitiator.Peer, 1, "Shutdown ;)")); });
            var handler = new ConsumerErrorHandler(durableConnection, Substitute.For <ISerializer>(), watcher);

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0]
            }, new Exception());

            // Assert
            watcher.Received().ErrorFormat(Arg.Any <string>(), Arg.Any <object[]>());
        }
        private ITunnel Create(IDurableConnection durableConnection, IRabbitWatcher rabbitWatcher)
        {
            var errorHandler      = new ConsumerErrorHandler(durableConnection, Global.DefaultSerializer, rabbitWatcher);
            var msgHandlerFactory = new DefaultMessageHandlerFactory(errorHandler, Global.DefaultSerializer, rabbitWatcher);
            var consumerManager   = new ConsumerManager(rabbitWatcher, msgHandlerFactory, Global.DefaultSerializer);

            var tunnel = new RabbitTunnel(consumerManager,
                                          rabbitWatcher,
                                          new DefaultRouteFinder(),
                                          durableConnection,
                                          Global.DefaultSerializer,
                                          Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            tunnel.AddSerializerObserver(errorHandler);
            tunnel.AddSerializerObserver(msgHandlerFactory);
            tunnel.AddSerializerObserver(consumerManager);
            return(tunnel);
        }
Exemple #7
0
        public void Should_catch_other_exceptions()
        {
            // Arrange
            var         watcher = Substitute.For <IRabbitWatcher>();
            IConnection connection;
            var         connectionFactory = CreateMockConnectionFactory <ManagedConnectionFactory>("/", out connection);

            connection.When(x => x.CreateModel())
            .Do(callInfo => { throw new Exception("unexpecctedException"); });
            var handler = new ConsumerErrorHandler(() => connectionFactory, Substitute.For <ISerializer>(), watcher);

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0]
            }, new Exception());

            // Assert
            watcher.Received().ErrorFormat(Arg.Any <string>(), Arg.Any <object[]>());
        }
Exemple #8
0
        private ITunnel Create(DurableConnection durableConnection, ISerializer serializer, IRabbitWatcher rabbitWatcher)
        {
            var abc = new ObjectObserver <IObserver <ISerializer> >();

            Func <IConsumerErrorHandler> errorHandler = () =>
            {
                var handdler = new ConsumerErrorHandler(durableConnection, serializer, rabbitWatcher);
                abc.FireEvent(handdler);
                return(handdler);
            };

            Func <IMessageHandlerFactory> handlerFactory = () =>
            {
                var factory = new DefaultMessageHandlerFactory(_burrowResolver.Resolve <IConsumerErrorHandler>() ?? errorHandler(),
                                                               serializer,
                                                               rabbitWatcher);
                abc.FireEvent(factory);
                return(factory);
            };

            Func <IConsumerManager> consumerManager = () =>
            {
                var manager = new ConsumerManager(rabbitWatcher,
                                                  _burrowResolver.Resolve <IMessageHandlerFactory>() ?? handlerFactory(),
                                                  serializer);
                abc.FireEvent(manager);
                return(manager);
            };

            var tunnel = new RabbitTunnel(_burrowResolver.Resolve <IConsumerManager>() ?? consumerManager(),
                                          rabbitWatcher,
                                          _burrowResolver.Resolve <IRouteFinder>() ?? new DefaultRouteFinder(),
                                          durableConnection,
                                          serializer,
                                          _burrowResolver.Resolve <ICorrelationIdGenerator>() ?? Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            abc.ObjectCreated += tunnel.AddSerializerObserver;

            return(tunnel);
        }
Exemple #9
0
        public void Should_create_exchange_queue_and_put_error_to_queue()
        {
            // Arrange
            IConnection connection;
            var         connectionFactory = CreateMockConnectionFactory <ManagedConnectionFactory>("/", out connection);
            var         model             = Substitute.For <IModel>();

            connection.CreateModel().Returns(model);
            var basicProperies = Substitute.For <IBasicProperties>();

            model.CreateBasicProperties().Returns(basicProperies);

            var handler = new ConsumerErrorHandler(() => connectionFactory, Substitute.For <ISerializer>(), Substitute.For <IRabbitWatcher>());

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0], BasicProperties = basicProperies
            }, new Exception());

            // Assert
            model.Received().BasicPublish(Arg.Any <string>(), string.Empty, basicProperies, Arg.Any <byte[]>());
        }
        public void Should_create_exchange_queue_and_put_error_to_queue()
        {
            // Arrange
            var durableConnection = Substitute.For <IDurableConnection>();

            var model = Substitute.For <IModel>();

            durableConnection.CreateChannel().Returns(model);
            var basicProperies = Substitute.For <IBasicProperties>();

            model.CreateBasicProperties().Returns(basicProperies);

            var handler = new ConsumerErrorHandler(durableConnection, Substitute.For <ISerializer>(), Substitute.For <IRabbitWatcher>());

            // Action
            handler.HandleError(new BasicDeliverEventArgs {
                Body = new byte[0], BasicProperties = basicProperies
            }, new Exception());

            // Assert
            model.Received().BasicPublish(Arg.Any <string>(), string.Empty, basicProperies, Arg.Any <byte[]>());
        }