From d96a6a6f1da7a517c9dbae5b396b5bfd9024a05c Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 13 May 2021 10:28:06 +0800 Subject: [PATCH 1/2] Remove item connection creation fails --- .../Volo/Abp/RabbitMQ/ConnectionPool.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs index c227d978a1..58ae4e2968 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.RabbitMQ { connectionName ??= RabbitMqConnections.DefaultConnectionName; - return Connections.GetOrAdd( + var lazyConnection = Connections.GetOrAdd( connectionName, () => new Lazy(() => { var connection = Options.Connections.GetOrDefault(connectionName); @@ -34,7 +34,14 @@ namespace Volo.Abp.RabbitMQ return hostnames.Length == 1 ? connection.CreateConnection() : connection.CreateConnection(hostnames); }) - ).Value; + ); + + if (!lazyConnection.IsValueCreated) + { + Connections.TryRemove(connectionName, out _); + } + + return lazyConnection.Value; } public void Dispose() From e354496e3576993320e4bd096ed89afbc2088428 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 13 May 2021 11:36:15 +0800 Subject: [PATCH 2/2] Update ConnectionPool.cs --- .../Volo/Abp/RabbitMQ/ConnectionPool.cs | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs index 58ae4e2968..a7dca73646 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/ConnectionPool.cs @@ -25,23 +25,26 @@ namespace Volo.Abp.RabbitMQ { connectionName ??= RabbitMqConnections.DefaultConnectionName; - var lazyConnection = Connections.GetOrAdd( - connectionName, () => new Lazy(() => - { - var connection = Options.Connections.GetOrDefault(connectionName); - var hostnames = connection.HostName.TrimEnd(';').Split(';'); - // Handle Rabbit MQ Cluster. - return hostnames.Length == 1 ? connection.CreateConnection() : connection.CreateConnection(hostnames); + try + { + var lazyConnection = Connections.GetOrAdd( + connectionName, () => new Lazy(() => + { + var connection = Options.Connections.GetOrDefault(connectionName); + var hostnames = connection.HostName.TrimEnd(';').Split(';'); + // Handle Rabbit MQ Cluster. + return hostnames.Length == 1 ? connection.CreateConnection() : connection.CreateConnection(hostnames); - }) - ); + }) + ); - if (!lazyConnection.IsValueCreated) + return lazyConnection.Value; + } + catch (Exception) { Connections.TryRemove(connectionName, out _); + throw; } - - return lazyConnection.Value; } public void Dispose()