コード例 #1
0
        public void TestChannelCache()
        {
            var channelCf = new CachingConnectionFactory("localhost")
            {
                ServiceName      = "testChannelCache",
                ChannelCacheSize = 4
            };
            var c1 = channelCf.CreateConnection();
            var c2 = channelCf.CreateConnection();

            Assert.Same(c1, c2);
            var ch1 = c1.CreateChannel(false);
            var ch2 = c1.CreateChannel(false);
            var ch3 = c1.CreateChannel(true);
            var ch4 = c1.CreateChannel(true);
            var ch5 = c1.CreateChannel(true);

            ch1.Close();
            ch2.Close();
            ch3.Close();
            ch4.Close();
            ch5.Close();
            var props = channelCf.GetCacheProperties();

            Assert.StartsWith("testChannelCache", (string)props["connectionName"]);
            Assert.Equal(4, props["channelCacheSize"]);
            Assert.Equal(2, props["idleChannelsNotTx"]);
            Assert.Equal(3, props["idleChannelsTx"]);
            Assert.Equal(2, props["idleChannelsNotTxHighWater"]);
            Assert.Equal(3, props["idleChannelsTxHighWater"]);
            ch1   = c1.CreateChannel(false);
            ch3   = c1.CreateChannel(true);
            props = channelCf.GetCacheProperties();
            Assert.Equal(1, props["idleChannelsNotTx"]);
            Assert.Equal(2, props["idleChannelsTx"]);
            Assert.Equal(2, props["idleChannelsNotTxHighWater"]);
            Assert.Equal(3, props["idleChannelsTxHighWater"]);
            ch1 = c1.CreateChannel(false);
            ch2 = c1.CreateChannel(false);
            ch3 = c1.CreateChannel(true);
            ch4 = c1.CreateChannel(true);
            ch5 = c1.CreateChannel(true);
            var ch6 = c1.CreateChannel(true);
            var ch7 = c1.CreateChannel(true); // #5

            ch1.Close();
            ch2.Close();
            ch3.Close();
            ch4.Close();
            ch5.Close();
            ch6.Close();
            ch7.Close();
            props = channelCf.GetCacheProperties();
            Assert.Equal(2, props["idleChannelsNotTx"]);
            Assert.Equal(4, props["idleChannelsTx"]);
            Assert.Equal(2, props["idleChannelsNotTxHighWater"]);
            Assert.Equal(4, props["idleChannelsTxHighWater"]);
        }
コード例 #2
0
        public void TestConnectionCache()
        {
            var connectionCf = new CachingConnectionFactory("localhost")
            {
                ChannelCacheSize    = 10,
                ConnectionCacheSize = 5,
                CacheMode           = CachingMode.CONNECTION,
                ServiceName         = "testConnectionCache"
            };
            var c1  = connectionCf.CreateConnection();
            var c2  = connectionCf.CreateConnection();
            var ch1 = c1.CreateChannel(false);
            var ch2 = c1.CreateChannel(false);
            var ch3 = c2.CreateChannel(true);
            var ch4 = c2.CreateChannel(true);
            var ch5 = c2.CreateChannel(false);

            ch1.Close();
            ch2.Close();
            ch3.Close();
            ch4.Close();
            ch5.Close();
            c1.Close();
            var props = connectionCf.GetCacheProperties();

            Assert.Equal(10, props["channelCacheSize"]);
            Assert.Equal(5, props["connectionCacheSize"]);
            Assert.Equal(2, props["openConnections"]);
            Assert.Equal(1, props["idleConnections"]);
            c2.Close();
            props = connectionCf.GetCacheProperties();
            Assert.Equal(2, props["idleConnections"]);
            Assert.Equal(2, props["idleConnectionsHighWater"]);
            var c1Port = c1.LocalPort;
            var c2Port = c2.LocalPort;

            Assert.StartsWith("testConnectionCache:1", (string)props["connectionName:" + c1Port]);
            Assert.StartsWith("testConnectionCache:2", (string)props["connectionName:" + c2Port]);
            Assert.Equal(2, props["idleChannelsNotTx:" + c1Port]);
            Assert.Equal(0, props["idleChannelsTx:" + c1Port]);
            Assert.Equal(2, props["idleChannelsNotTxHighWater:" + c1Port]);
            Assert.Equal(0, props["idleChannelsTxHighWater:" + c1Port]);
            Assert.Equal(1, props["idleChannelsNotTx:" + c2Port]);
            Assert.Equal(2, props["idleChannelsTx:" + c2Port]);
            Assert.Equal(1, props["idleChannelsNotTxHighWater:" + c2Port]);
            Assert.Equal(2, props["idleChannelsTxHighWater:" + c2Port]);
        }
        public void TestCachedConnectionsAndChannels()
        {
            connectionFactory.CacheMode           = CachingMode.CONNECTION;
            connectionFactory.ConnectionCacheSize = 1;
            connectionFactory.ChannelCacheSize    = 3;
            var connections = new List <IConnection>
            {
                connectionFactory.CreateConnection(),
                connectionFactory.CreateConnection()
            };
            var allocatedConnections = connectionFactory._allocatedConnections;

            Assert.Equal(2, allocatedConnections.Count);
            Assert.NotSame(connections[0], connections[1]);
            var channels = new List <IModel>();

            for (var i = 0; i < 5; i++)
            {
                channels.Add(connections[0].CreateChannel(false));
                channels.Add(connections[1].CreateChannel(false));
                channels.Add(connections[0].CreateChannel(true));
                channels.Add(connections[1].CreateChannel(true));
            }

            var cachedChannels = connectionFactory._allocatedConnectionNonTransactionalChannels;

            Assert.Empty(cachedChannels[(ChannelCachingConnectionProxy)connections[0]]);
            Assert.Empty(cachedChannels[(ChannelCachingConnectionProxy)connections[1]]);

            var cachedTxChannels = connectionFactory._allocatedConnectionTransactionalChannels;

            Assert.Empty(cachedTxChannels[(ChannelCachingConnectionProxy)connections[0]]);
            Assert.Empty(cachedTxChannels[(ChannelCachingConnectionProxy)connections[1]]);
            foreach (var c in channels)
            {
                c.Close();
            }

            Assert.Equal(3, cachedChannels[(ChannelCachingConnectionProxy)connections[0]].Count);
            Assert.Equal(3, cachedChannels[(ChannelCachingConnectionProxy)connections[1]].Count);
            Assert.Equal(3, cachedTxChannels[(ChannelCachingConnectionProxy)connections[0]].Count);
            Assert.Equal(3, cachedTxChannels[(ChannelCachingConnectionProxy)connections[1]].Count);
            for (var i = 0; i < 3; i++)
            {
                Assert.Equal(channels[i * 4], connections[0].CreateChannel(false));
                Assert.Equal(channels[(i * 4) + 1], connections[1].CreateChannel(false));
                Assert.Equal(channels[(i * 4) + 2], connections[0].CreateChannel(true));
                Assert.Equal(channels[(i * 4) + 3], connections[1].CreateChannel(true));
            }

            cachedChannels = connectionFactory._allocatedConnectionNonTransactionalChannels;
            Assert.Empty(cachedChannels[(ChannelCachingConnectionProxy)connections[0]]);
            Assert.Empty(cachedChannels[(ChannelCachingConnectionProxy)connections[1]]);

            cachedTxChannels = connectionFactory._allocatedConnectionTransactionalChannels;
            Assert.Empty(cachedTxChannels[(ChannelCachingConnectionProxy)connections[0]]);
            Assert.Empty(cachedTxChannels[(ChannelCachingConnectionProxy)connections[1]]);
            foreach (var c in channels)
            {
                c.Close();
            }

            foreach (var c in connections)
            {
                c.Close();
            }

            Assert.Equal(3, cachedChannels[(ChannelCachingConnectionProxy)connections[0]].Count);
            Assert.Empty(cachedChannels[(ChannelCachingConnectionProxy)connections[1]]);
            Assert.Equal(3, cachedTxChannels[(ChannelCachingConnectionProxy)connections[0]].Count);
            Assert.Empty(cachedTxChannels[(ChannelCachingConnectionProxy)connections[1]]);

            allocatedConnections = connectionFactory._allocatedConnections;
            Assert.Equal(2, allocatedConnections.Count);
            var props = connectionFactory.GetCacheProperties();

            Assert.Equal(1, props["openConnections"]);

            var connection       = connectionFactory.CreateConnection();
            var rabbitConnection = connection.Connection;

            rabbitConnection.Close();

            var channel = connection.CreateChannel(false);

            allocatedConnections = connectionFactory._allocatedConnections;
            Assert.Equal(2, allocatedConnections.Count);
            props = connectionFactory.GetCacheProperties();
            Assert.Equal(1, props["openConnections"]);

            channel.Close();
            connection.Close();

            allocatedConnections = connectionFactory._allocatedConnections;
            Assert.Equal(2, allocatedConnections.Count);
            props = connectionFactory.GetCacheProperties();
            Assert.Equal(1, props["openConnections"]);
        }