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); }
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); }
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[]>()); }
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); }
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[]>()); }