diff --git a/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/Internals/ConnectionStringParserTests.cs b/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/Internals/ConnectionStringParserTests.cs index 46ec05890..a5d5e2336 100644 --- a/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/Internals/ConnectionStringParserTests.cs +++ b/src/Transports/RabbitMQ/Wolverine.RabbitMQ.Tests/Internals/ConnectionStringParserTests.cs @@ -60,5 +60,15 @@ public void virtual_host() ConnectionStringParser.Apply("virtualhost=weird", theFactory); theFactory.VirtualHost.ShouldBe("weird"); } + + [Theory] + [InlineData("host=foo;port=5673;")] + [InlineData("host=foo;port=5673")] + public void trailing_semicolon_is_optional(string connectionString) + { + ConnectionStringParser.Apply(connectionString, theFactory); + theFactory.HostName.ShouldBe("foo"); + theFactory.Port.ShouldBe(5673); + } } \ No newline at end of file diff --git a/src/Transports/RabbitMQ/Wolverine.RabbitMQ/Internal/ConnectionStringParser.cs b/src/Transports/RabbitMQ/Wolverine.RabbitMQ/Internal/ConnectionStringParser.cs index 40be354a3..21f068672 100644 --- a/src/Transports/RabbitMQ/Wolverine.RabbitMQ/Internal/ConnectionStringParser.cs +++ b/src/Transports/RabbitMQ/Wolverine.RabbitMQ/Internal/ConnectionStringParser.cs @@ -7,7 +7,7 @@ internal static class ConnectionStringParser { public static void Apply(string connectionString, ConnectionFactory factory) { - var values = connectionString.ToDelimitedArray(';'); + var values = connectionString.ToDelimitedArray(';').Where(x => x.IsNotEmpty()); foreach (var value in values) { var parts = value.ToDelimitedArray('='); @@ -28,7 +28,7 @@ internal static void Parse(string key, string value, ConnectionFactory factory) case "host": factory.HostName = value; break; - + case "port": if (int.TryParse(value, out var port)) { @@ -41,23 +41,23 @@ internal static void Parse(string key, string value, ConnectionFactory factory) } break; - + case "username": factory.UserName = value; break; - + case "password": factory.Password = value; break; - + case "usetls": Console.WriteLine("Wolverine does not respect the UseTLS flag, you will need to configure that directly on ConnectionFactory"); break; - + case "virtualhost": factory.VirtualHost = value; break; - + case "requestedheartbeat": if (int.TryParse(value, out var heartbeat)) { @@ -70,7 +70,7 @@ internal static void Parse(string key, string value, ConnectionFactory factory) } break; - + default: throw new ArgumentOutOfRangeException(nameof(key), $"Unknown connection string property '{key}'."); }