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