Skip to content

Commit 74bbb9a

Browse files
authored
Merge pull request #253 from Particular/release-4.1.0
Release 4.1.0
2 parents bd3894c + d3b8e1d commit 74bbb9a

File tree

5 files changed

+43
-35
lines changed

5 files changed

+43
-35
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Before doing anything else, make sure you have RabbitMQ up and running in your e
1818

1919
## Samples
2020

21-
See https://github.com/Particular/NServiceBus.RabbitMQ.Samples
21+
See http://docs.particular.net/samples/rabbitmq/
2222

2323
## Maintainers
2424
The following team is responsible for this repository: @Particular/rabbitmq-transport-maintainers

src/NServiceBus.RabbitMQ.Tests/APIApprovals.Approve.approved.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ namespace NServiceBus
2626
public static NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> UseConnectionManager<T>(this NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> transportExtensions) { }
2727
public static NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> UseDirectRoutingTopology(this NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> transportExtensions, System.Func<System.Type, string> routingKeyConvention = null, System.Func<string, System.Type, string> exchangeNameConvention = null) { }
2828
public static NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> UsePublisherConfirms(this NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> transportExtensions, bool usePublisherConfirms) { }
29+
public static NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> UseRoutingTopology(this NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> transportExtensions, System.Func<bool, NServiceBus.Transport.RabbitMQ.IRoutingTopology> topologyFactory) { }
30+
[System.ObsoleteAttribute("Use `RabbitMQTransportSettingsExtensions.UseRoutingTopology(TransportExtensions<R" +
31+
"abbitMQTransport> transportExtensions, Func<bool, IRoutingTopology>)` instead. W" +
32+
"ill be treated as an error from version 5.0.0. Will be removed in version 6.0.0." +
33+
"", false)]
2934
public static NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> UseRoutingTopology<T>(this NServiceBus.TransportExtensions<NServiceBus.RabbitMQTransport> transportExtensions)
3035
where T : NServiceBus.Transport.RabbitMQ.IRoutingTopology, new () { }
3136
}
Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace NServiceBus.Transport.RabbitMQ
22
{
33
using System.Threading.Tasks;
4+
using global::RabbitMQ.Client;
45

56
class QueueCreator : ICreateQueues
67
{
@@ -17,28 +18,28 @@ public QueueCreator(ConnectionFactory connectionFactory, IRoutingTopology routin
1718

1819
public Task CreateQueueIfNecessary(QueueBindings queueBindings, string identity)
1920
{
20-
foreach (var receivingAddress in queueBindings.ReceivingAddresses)
21+
using (var connection = connectionFactory.CreateAdministrationConnection())
22+
using (var channel = connection.CreateModel())
2123
{
22-
CreateQueueIfNecessary(receivingAddress);
23-
}
24+
foreach (var receivingAddress in queueBindings.ReceivingAddresses)
25+
{
26+
CreateQueueIfNecessary(channel, receivingAddress);
27+
}
2428

25-
foreach (var sendingAddress in queueBindings.SendingAddresses)
26-
{
27-
CreateQueueIfNecessary(sendingAddress);
29+
foreach (var sendingAddress in queueBindings.SendingAddresses)
30+
{
31+
CreateQueueIfNecessary(channel, sendingAddress);
32+
}
2833
}
2934

3035
return TaskEx.CompletedTask;
3136
}
3237

33-
void CreateQueueIfNecessary(string receivingAddress)
38+
void CreateQueueIfNecessary(IModel channel, string receivingAddress)
3439
{
35-
using (var connection = connectionFactory.CreateAdministrationConnection())
36-
using (var channel = connection.CreateModel())
37-
{
38-
channel.QueueDeclare(receivingAddress, durableMessagesEnabled, false, false, null);
40+
channel.QueueDeclare(receivingAddress, durableMessagesEnabled, false, false, null);
3941

40-
routingTopology.Initialize(channel, receivingAddress);
41-
}
42+
routingTopology.Initialize(channel, receivingAddress);
4243
}
4344
}
4445
}

src/NServiceBus.RabbitMQ/Configuration/RabbitMQTransportSettingsExtensions.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@
1010
/// </summary>
1111
public static partial class RabbitMQTransportSettingsExtensions
1212
{
13+
/// <summary>
14+
/// Registers a custom routing topology.
15+
/// </summary>
16+
/// <param name="transportExtensions"></param>
17+
/// <param name="topologyFactory">The function used to create the routing topology instance. The parameter of the function indicates whether exchanges and queues declared by the routing topology should be durable.</param>
18+
public static TransportExtensions<RabbitMQTransport> UseRoutingTopology(this TransportExtensions<RabbitMQTransport> transportExtensions, Func<bool, IRoutingTopology> topologyFactory)
19+
{
20+
transportExtensions.GetSettings().Set<Func<bool, IRoutingTopology>>(topologyFactory);
21+
return transportExtensions;
22+
}
23+
1324
/// <summary>
1425
/// Uses the direct routing topology with the specified conventions.
1526
/// </summary>
@@ -28,17 +39,18 @@ public static TransportExtensions<RabbitMQTransport> UseDirectRoutingTopology(th
2839
exchangeNameConvention = (address, eventType) => "amq.topic";
2940
}
3041

31-
transportExtensions.GetSettings().Set<DirectRoutingTopology.Conventions>(new DirectRoutingTopology.Conventions(exchangeNameConvention, routingKeyConvention));
42+
transportExtensions.UseRoutingTopology(durable => new DirectRoutingTopology(new DirectRoutingTopology.Conventions(exchangeNameConvention, routingKeyConvention), durable));
3243

3344
return transportExtensions;
3445
}
3546

3647
/// <summary>
3748
/// Registers a custom routing topology.
3849
/// </summary>
50+
[ObsoleteEx(RemoveInVersion = "6.0", TreatAsErrorFromVersion = "5.0", ReplacementTypeOrMember = "RabbitMQTransportSettingsExtensions.UseRoutingTopology(TransportExtensions<RabbitMQTransport> transportExtensions, Func<bool, IRoutingTopology>)")]
3951
public static TransportExtensions<RabbitMQTransport> UseRoutingTopology<T>(this TransportExtensions<RabbitMQTransport> transportExtensions) where T : IRoutingTopology, new()
4052
{
41-
transportExtensions.GetSettings().Set<IRoutingTopology>(new T());
53+
transportExtensions.UseRoutingTopology(durable => new T());
4254
return transportExtensions;
4355
}
4456

src/NServiceBus.RabbitMQ/RabbitMQTransportInfrastructure.cs

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public RabbitMQTransportInfrastructure(SettingsHolder settings, string connectio
2525
var connectionConfiguration = new ConnectionStringParser(settings).Parse(connectionString);
2626
connectionFactory = new ConnectionFactory(connectionConfiguration);
2727

28-
CreateTopology();
28+
routingTopology = CreateRoutingTopology();
2929

3030
bool usePublisherConfirms;
3131
if (!settings.TryGet(SettingsKeys.UsePublisherConfirms, out usePublisherConfirms))
@@ -88,27 +88,17 @@ public void Dispose()
8888
channelProvider.Dispose();
8989
}
9090

91-
void CreateTopology()
91+
IRoutingTopology CreateRoutingTopology()
9292
{
93-
if (settings.HasSetting<IRoutingTopology>())
94-
{
95-
routingTopology = settings.Get<IRoutingTopology>();
96-
}
97-
else
93+
var durable = settings.DurableMessagesEnabled();
94+
Func<bool, IRoutingTopology> topologyFactory;
95+
96+
if (!settings.TryGet(out topologyFactory))
9897
{
99-
var durable = settings.DurableMessagesEnabled();
100-
101-
DirectRoutingTopology.Conventions conventions;
102-
103-
if (settings.TryGet(out conventions))
104-
{
105-
routingTopology = new DirectRoutingTopology(conventions, durable);
106-
}
107-
else
108-
{
109-
routingTopology = new ConventionalRoutingTopology(durable);
110-
}
98+
topologyFactory = d => new ConventionalRoutingTopology(d);
11199
}
100+
101+
return topologyFactory(durable);
112102
}
113103

114104
IPushMessages CreateMessagePump()

0 commit comments

Comments
 (0)