This implementation will provide the ability to fail over to different node if it cannot connect to a node in the cluster
Наследование: DurableConnection
Пример #1
0
        public void Should_unsubscribe_to_ConnectionEstablished_event()
        {
            var connectionFactory = new ManagedConnectionFactory
            {
                HostName = "localhost",
                Port = 5672,
                VirtualHost = "/",
                UserName = "******",
                Password = "******"
            };
            var connection = new HaConnection(Substitute.For<IRetryPolicy>(),
                             Substitute.For<IRabbitWatcher>(),
                             new List<ManagedConnectionFactory>
                             {
                                 connectionFactory
                             });

            var fired = false;
            connection.Connected += () => { fired = true; };
            ManagedConnectionFactory.ConnectionEstablished += (a, b) => { }; //NOTE: To make it not null
            connection.Dispose();

            var model = Substitute.For<IModel>();
            model.IsOpen.Returns(true);
            var c = Substitute.For<IConnection>();
            c.CreateModel().Returns(model);
            c.IsOpen.Returns(true);
            c.Endpoint.Returns(connectionFactory.Endpoint);
            ManagedConnectionFactory.SharedConnections[connectionFactory.Endpoint + connectionFactory.VirtualHost] = c;

            ManagedConnectionFactory.ConnectionEstablished.Invoke(new AmqpTcpEndpoint("localhost"), "/");

            Assert.IsFalse(fired);
        }
Пример #2
0
        public void Should_bind_to_ConnectionEstablished_event_and_change_connection_status_if_a_share_connection_established()
        {
            var connection = Substitute.For<IConnection>();
            connection.IsOpen.Returns(true);
            var factory1 = Substitute.For<ManagedConnectionFactory>();
            factory1.HostName = "host1";
            factory1.VirtualHost = "/virtualhost";
            factory1.EstablishConnection().Returns(connection);


            var factory2 = Substitute.For<ManagedConnectionFactory>();
            factory2.HostName = "host2";
            factory2.VirtualHost = "/virtualhost";

            var factory3 = Substitute.For<ManagedConnectionFactory>();
            factory2.HostName = "host3";
            factory2.VirtualHost = "/virtualhost";

            var haConnection = new HaConnection(Substitute.For<IRetryPolicy>(),
                              Substitute.For<IRabbitWatcher>(),
                              new List<ManagedConnectionFactory> { factory3, factory2, factory1 });


            Assert.AreEqual(factory3.HostName, haConnection.ConnectionFactories.Current.HostName);
            Assert.AreEqual(factory3.VirtualHost, haConnection.ConnectionFactories.Current.VirtualHost);

            // Action
            factory1.CreateConnection();

            // Assert
            Assert.AreEqual(factory1.HostName, haConnection.ConnectionFactories.Current.HostName);
            Assert.AreEqual(factory1.VirtualHost, haConnection.ConnectionFactories.Current.VirtualHost);
        }
Пример #3
0
        /// <summary>
        /// Create a tunnel with provided connection string and IRabbitWatcher object
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="watcher"></param>
        /// <returns></returns>
        public virtual ITunnel Create(string connectionString, IRabbitWatcher watcher)
        {
            var clusterConnections = connectionString.Split(new[] {'|'}, StringSplitOptions.RemoveEmptyEntries);
            if (clusterConnections.Length > 1)
            {
                var factories = clusterConnections.Select(x => new ManagedConnectionFactory(new ConnectionString(x)))
                                                  .ToList();

                var rabbitWatcher = watcher ?? Global.DefaultWatcher;
                var haConnection = new HaConnection(new DefaultRetryPolicy(), rabbitWatcher, factories);
                return Create(haConnection, rabbitWatcher);
            }

            var connectionValues = new ConnectionString(connectionString);
            return Create(new ManagedConnectionFactory(connectionValues), watcher);
        }
Пример #4
0
        public override ITunnel Create(string connectionString, IRabbitWatcher watcher)
        {
            if (RabbitTunnel.Factory is DependencyInjectionTunnelFactory)
            {
                return RabbitTunnel.Factory.Create(connectionString, watcher);
            }

            var clusterConnections = connectionString.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            if (clusterConnections.Length > 1)
            {
                var factories = clusterConnections.Select(x => new ManagedConnectionFactory(new ConnectionString(x)))
                                                  .ToList();

                var rabbitWatcher = watcher ?? Global.DefaultWatcher;
                var haConnection = new HaConnection(new DefaultRetryPolicy(), rabbitWatcher, factories);
                return Create(haConnection, rabbitWatcher);
            }


            var cnn = new ConnectionString(connectionString);
            return Create(cnn.Host, cnn.Port, cnn.VirtualHost, cnn.UserName, cnn.Password, watcher);
        }
Пример #5
0
        public void Should_convert_connection_factories_to_managed_connection_factories()
        {
            // Arrange
            var connection = new HaConnection(Substitute.For<IRetryPolicy>(), 
                             Substitute.For<IRabbitWatcher>(), 
                             new List<ManagedConnectionFactory>
                             {
                                 new ManagedConnectionFactory
                                 {
                                     HostName = "localhost",
                                     Port = 5672,
                                     VirtualHost = "/",
                                     UserName = "******",
                                     Password = "******"
                                 }
                             });

            Assert.IsTrue(connection.ConnectionFactory is ManagedConnectionFactory);
            Assert.AreEqual("localhost", connection.ConnectionFactory.HostName);
            Assert.AreEqual("vantheshark", connection.ConnectionFactory.UserName);
            Assert.AreEqual("123", connection.ConnectionFactory.Password);
            Assert.AreEqual(5672, connection.ConnectionFactory.Port);
            Assert.AreEqual("/", connection.ConnectionFactory.VirtualHost);
        }