コード例 #1
0
ファイル: RabbitQueue.cs プロジェクト: PlumpMath/SV.EventLoop
 public RabbitQueue(RabbitTunnel tunnel, ushort batchSize, ushort queuePrefetchSize, string subscriptionName)
     : this(tunnel)
 {
     this._batchSize         = batchSize;
     this._queuePrefetchSize = queuePrefetchSize;
     this._subscriptionName  = subscriptionName;
 }
コード例 #2
0
        public void Should_return_0_if_QueueDeclarePassive_return_null()
        {
            // Arrange
            var            newChannel    = Substitute.For <IModel>();
            QueueDeclareOk declareResult = null;

            newChannel.QueueDeclarePassive(Arg.Any <string>()).Returns(declareResult);
            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.IsConnected.Returns(true);
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            var count = tunnel.GetMessageCount(new SubscriptionOption <Customer>
            {
                SubscriptionName = "subscriptionName"
            });

            // Assert
            Assert.AreEqual((uint)0, count);
        }
コード例 #3
0
        public void Should_use_route_finder_to_find_routing_key_then_publish_serialized_msg()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event <Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");

            // Assert
            routeFinder.Received().FindRoutingKey <string>();
            newChannel.Received().BasicPublish(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <IBasicProperties>(), Arg.Any <byte[]>());
        }
コード例 #4
0
        public void Should_catch_all_exception_and_return_0()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            newChannel.When(x => x.QueueDeclarePassive(Arg.Any <string>()))
            .Do(callInfo => { throw new Exception("Some errors happen"); });

            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.IsConnected.Returns(true);
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            var count = tunnel.GetMessageCount(new SubscriptionOption <Customer>
            {
                SubscriptionName = "subscriptionName"
            });

            // Assert
            Assert.AreEqual((uint)0, count);
            newChannel.Received(1).QueueDeclarePassive(Arg.Any <string>());
        }
コード例 #5
0
        public void Should_be_able_to_publish_with_routingKey()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event <Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha", "RoutingKey");

            // Assert
            routeFinder.DidNotReceive().FindRoutingKey <string>();
            newChannel.Received().BasicPublish(Arg.Any <string>(), "RoutingKey", Arg.Is <IBasicProperties>(p => p.Headers.Count == 0), Arg.Any <byte[]>());
        }
コード例 #6
0
        public void Should_publish_message_to_header_exchange_with_custom_headers_if_provided()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event <Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha", new ListDictionary {
                { "SomeHeaderKey", "somevalue" }, { "AnotherHeaderKey", "somethingelse" }
            });

            // Assert
            routeFinder.Received(1).FindRoutingKey <string>();
            newChannel.Received(1).BasicPublish(Arg.Any <string>(),
                                                Arg.Any <string>(),
                                                Arg.Is <IBasicProperties>(arg => arg.Headers["SomeHeaderKey"].ToString() == "somevalue" && arg.Headers["AnotherHeaderKey"].ToString() == "somethingelse"),
                                                Arg.Any <byte[]>());
        }
コード例 #7
0
        public void Should_use_topic_route_finder_to_find_routing_key_if_provided()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For <ITopicExchangeRouteFinder>();

            routeFinder.FindRoutingKey("This.Is.A.Topic").Returns("This.Is.A.Topic");
            var durableConnection = Substitute.For <IDurableConnection>();

            ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event <Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("This.Is.A.Topic");
            tunnel.Publish("This.Is.A.Topic", new Dictionary <string, object>());

            // Assert
            routeFinder.Received(2).FindRoutingKey("This.Is.A.Topic");
            newChannel.Received(2).BasicPublish(Arg.Any <string>(), "This.Is.A.Topic", Arg.Any <IBasicProperties>(), Arg.Any <byte[]>());
        }
コード例 #8
0
        public void Should_catch_all_exception_and_return_0()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            newChannel.When(x => x.QueueDeclarePassive(Arg.Any<string>()))
                      .Do(callInfo => { throw new Exception("Some errors happen");});
            
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            durableConnection.IsConnected.Returns(true);
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            var count = tunnel.GetMessageCount(new SubscriptionOption<Customer>
            {
                SubscriptionName = "subscriptionName"
            });

            // Assert
            Assert.AreEqual((uint)0, count);
            newChannel.Received(1).QueueDeclarePassive(Arg.Any<string>());
        }
コード例 #9
0
ファイル: MethodPublish.cs プロジェクト: kangkot/Burrow.NET
        public void Should_use_topic_route_finder_to_find_routing_key_if_provided()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<ITopicExchangeRouteFinder>();
            routeFinder.FindRoutingKey("This.Is.A.Topic").Returns("This.Is.A.Topic");
            var durableConnection = Substitute.For<IDurableConnection>();
            ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event<Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("This.Is.A.Topic");
            tunnel.Publish("This.Is.A.Topic", new Dictionary<string, object>());

            // Assert
            routeFinder.Received(2).FindRoutingKey("This.Is.A.Topic");
            newChannel.Received(2).BasicPublish(Arg.Any<string>(), "This.Is.A.Topic", Arg.Any<IBasicProperties>(), Arg.Any<byte[]>());
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        public void Can_construct_with_provided_route_finder_and_durable_connection()
        {
            // Arrange
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();
            ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());

            // Action
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Assert
            Assert.IsNotNull(tunnel);
        }
コード例 #12
0
ファイル: Constructor.cs プロジェクト: kangkot/Burrow.NET
        public void Can_construct_with_provided_route_finder_and_durable_connection()
        {
            // Arrange
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());

            // Action
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Assert
            Assert.IsNotNull(tunnel);
        }
コード例 #13
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);
        }
コード例 #14
0
        public void Should_return_the_messagecount()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.QueueDeclarePassive(Arg.Any <string>()).Returns(new QueueDeclareOk("", 100, 0));
            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.IsConnected.Returns(true);
            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            var count = tunnel.GetMessageCount <Customer>("subscriptionName");

            // Assert
            Assert.AreEqual((uint)100, count);
        }
コード例 #15
0
        public void Should_throw_exception_if_publish_failed()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            routeFinder.When(x =>x.FindExchangeName<string>()).Do(callInfo => { throw new Exception("Test message");});
            var durableConnection = Substitute.For<IDurableConnection>();
            durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event<Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");
        }
コード例 #16
0
        public void Should_return_the_messagecount()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.QueueDeclarePassive(Arg.Any<string>()).Returns(new QueueDeclareOk("", 100, 0));
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            durableConnection.IsConnected.Returns(true);
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            var count = tunnel.GetMessageCount(new SubscriptionOption<Customer>
            {
                SubscriptionName = "subscriptionName"
            });

            // Assert
            Assert.AreEqual((uint)100, count);
        }
コード例 #17
0
ファイル: MethodPublish.cs プロジェクト: kangkot/Burrow.NET
        public void Should_use_route_finder_to_find_routing_key_then_publish_serialized_msg()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            ////durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event<Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");

            // Assert
            routeFinder.Received().FindRoutingKey<string>();
            newChannel.Received().BasicPublish(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IBasicProperties>(), Arg.Any<byte[]>());
        }
コード例 #18
0
        public void Should_create_dedicated_channel_without_reconnect_if_connection_has_been_connected_before()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder       = Substitute.For <IRouteFinder>();
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.IsConnected.Returns(true);
            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");
            tunnel.Publish("Hohohoho");

            // Assert
            routeFinder.Received().FindRoutingKey <string>();
            durableConnection.Received(1).CreateChannel();
            durableConnection.DidNotReceive().Connect();
            newChannel.Received(2).BasicPublish(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <IBasicProperties>(), Arg.Any <byte[]>());
        }
コード例 #19
0
        public void Should_throw_exception_if_publish_failed()
        {
            // Arrange
            var newChannel = Substitute.For <IModel>();

            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For <IRouteFinder>();

            routeFinder.When(x => x.FindExchangeName <string>()).Do(callInfo => { throw new Exception("Test message"); });
            var durableConnection = Substitute.For <IDurableConnection>();

            durableConnection.ConnectionFactory.Returns(Substitute.For <ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event <Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");
        }
コード例 #20
0
ファイル: MethodPublish.cs プロジェクト: kangkot/Burrow.NET
        public void Should_be_able_to_publish_with_routingKey()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event<Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha", "RoutingKey");

            // Assert
            routeFinder.DidNotReceive().FindRoutingKey<string>();
            newChannel.Received().BasicPublish(Arg.Any<string>(), "RoutingKey", Arg.Is<IBasicProperties>(p => p.Headers.Count == 0), Arg.Any<byte[]>());
        }
コード例 #21
0
ファイル: RabbitQueue.cs プロジェクト: PlumpMath/SV.EventLoop
 public RabbitQueue(RabbitTunnel tunnel, ushort batchSize, ushort queuePrefetchSize, string subscriptionName, IRouteFinder routeFinder)
     : this(tunnel, batchSize, queuePrefetchSize, subscriptionName)
 {
     this._routeFinder = routeFinder;
 }
コード例 #22
0
ファイル: MethodPublish.cs プロジェクト: kangkot/Burrow.NET
        public void Should_create_dedicated_channel_without_reconnect_if_connection_has_been_connected_before()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            durableConnection.IsConnected.Returns(true);
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha");
            tunnel.Publish("Hohohoho");

            // Assert
            routeFinder.Received().FindRoutingKey<string>();
            durableConnection.Received(1).CreateChannel();
            durableConnection.DidNotReceive().Connect();
            newChannel.Received(2).BasicPublish(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IBasicProperties>(), Arg.Any<byte[]>());
        }
コード例 #23
0
ファイル: TunnelFactory.cs プロジェクト: kangkot/Burrow.NET
        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;
        }
コード例 #24
0
        public virtual ITunnel Create(string hostName, string virtualHost, string username, string password, IRabbitWatcher 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 RabbitTunnel(consumerManager,
                                          rabbitWatcher, 
                                          new DefaultRouteFinder(), 
                                          durableConnection,
                                          Global.DefaultSerializer,
                                          Global.DefaultCorrelationIdGenerator,
                                          Global.DefaultPersistentMode);

            tunnel.AddSerializerObserver(errorHandler);
            tunnel.AddSerializerObserver(msgHandlerFactory);
            tunnel.AddSerializerObserver(consumerManager);
            return tunnel;
        }
コード例 #25
0
ファイル: MethodPublish.cs プロジェクト: kangkot/Burrow.NET
        public void Should_publish_message_to_header_exchange_with_custom_headers_if_provided()
        {
            // Arrange
            var newChannel = Substitute.For<IModel>();
            newChannel.IsOpen.Returns(true);
            var routeFinder = Substitute.For<IRouteFinder>();
            var durableConnection = Substitute.For<IDurableConnection>();
            //durableConnection.ConnectionFactory.Returns(Substitute.For<ConnectionFactory>());
            durableConnection.When(x => x.Connect()).Do(callInfo =>
            {
                durableConnection.Connected += Raise.Event<Action>();
                durableConnection.IsConnected.Returns(true);
            });

            durableConnection.CreateChannel().Returns(newChannel);
            var tunnel = new RabbitTunnel(routeFinder, durableConnection);

            // Action
            tunnel.Publish("Muahaha", new Dictionary<string, object>{ { "SomeHeaderKey", "somevalue" }, { "AnotherHeaderKey", "somethingelse" } });

            // Assert
            routeFinder.Received(1).FindRoutingKey<string>();
            newChannel.Received(1).BasicPublish(Arg.Any<string>(), 
                                                Arg.Any<string>(),
                                                Arg.Is<IBasicProperties>(arg => arg.Headers["SomeHeaderKey"].ToString() == "somevalue" && arg.Headers["AnotherHeaderKey"].ToString() == "somethingelse"), 
                                                Arg.Any<byte[]>());
        }
コード例 #26
0
ファイル: RabbitQueue.cs プロジェクト: PlumpMath/SV.EventLoop
 public RabbitQueue(RabbitTunnel tunnel)
 {
     this._tunnel = tunnel;
 }