Skip to content

Commit d3b8e1d

Browse files
authored
Merge pull request #250 from Particular/improve-iroutingtopology-registration
Create IRoutingTopology with factory delegate
2 parents 1066266 + 34aecdb commit d3b8e1d

File tree

3 files changed

+28
-21
lines changed

3 files changed

+28
-21
lines changed

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
}

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)