Skip to content

Commit e320ca4

Browse files
committed
Upgrades SC to the new Azure Topology:
- By default uses migration topology with budnle-1 topic - Can override the single topic via connection string - Can provide custom topology options via ServiceControl.Transport.ASBS/Topic setting
1 parent ba4fb02 commit e320ca4

File tree

8 files changed

+46
-47
lines changed

8 files changed

+46
-47
lines changed

src/Directory.Packages.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<PackageVersion Include="Microsoft-WindowsAPICodePack-Shell" Version="1.1.5" />
2929
<PackageVersion Include="Mindscape.Raygun4Net.NetCore" Version="11.2.1" />
3030
<PackageVersion Include="NLog.Extensions.Logging" Version="5.4.0" />
31-
<PackageVersion Include="NServiceBus" Version="9.2.4" />
31+
<PackageVersion Include="NServiceBus" Version="9.2.5" />
3232
<PackageVersion Include="NServiceBus.AcceptanceTesting" Version="9.2.4" />
3333
<PackageVersion Include="NServiceBus.AmazonSQS" Version="7.1.1" />
3434
<PackageVersion Include="NServiceBus.CustomChecks" Version="5.0.1" />
@@ -41,7 +41,7 @@
4141
<PackageVersion Include="NServiceBus.RabbitMQ" Version="9.2.0" />
4242
<PackageVersion Include="NServiceBus.SagaAudit" Version="5.0.2" />
4343
<PackageVersion Include="NServiceBus.Testing" Version="9.0.1" />
44-
<PackageVersion Include="NServiceBus.Transport.AzureServiceBus" Version="4.2.4" />
44+
<PackageVersion Include="NServiceBus.Transport.AzureServiceBus" Version="5.0.0-alpha.4" />
4545
<PackageVersion Include="NServiceBus.Transport.AzureStorageQueues" Version="13.0.2" />
4646
<PackageVersion Include="NServiceBus.Transport.Msmq.Sources" Version="3.0.2" />
4747
<PackageVersion Include="NServiceBus.Transport.SqlServer" Version="8.1.7" />

src/ServiceControl.Transports.ASBS/ASBSTransportCustomization.cs

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
namespace ServiceControl.Transports.ASBS
22
{
33
using System.Linq;
4+
using System.Text.Json;
45
using BrokerThroughput;
6+
using Configuration;
57
using Microsoft.Extensions.DependencyInjection;
68
using NServiceBus;
9+
using NServiceBus.Transport.AzureServiceBus;
710

811
public class ASBSTransportCustomization : TransportCustomization<AzureServiceBusTransport>
912
{
13+
const string DefaultSingleTopic = "bundle-1";
14+
1015
protected override void CustomizeTransportForPrimaryEndpoint(EndpointConfiguration endpointConfiguration, AzureServiceBusTransport transportDefinition, TransportSettings transportSettings) =>
1116
transportDefinition.TransportTransactionMode = TransportTransactionMode.SendsAtomicWithReceive;
1217

@@ -19,18 +24,39 @@ protected override void CustomizeTransportForMonitoringEndpoint(EndpointConfigur
1924
protected override AzureServiceBusTransport CreateTransport(TransportSettings transportSettings, TransportTransactionMode preferredTransactionMode = TransportTransactionMode.ReceiveOnly)
2025
{
2126
var connectionSettings = ConnectionStringParser.Parse(transportSettings.ConnectionString);
22-
var transport = connectionSettings.AuthenticationMethod.CreateTransportDefinition(connectionSettings);
23-
transport.UseWebSockets = connectionSettings.UseWebSockets;
27+
TopologyOptions topologyOptions;
2428

25-
if (connectionSettings.TopicName != null)
29+
var serviceBusRootNamespace = new SettingsRootNamespace("ServiceControl.Transport.ASBS");
30+
if (SettingsReader.TryRead<string>(serviceBusRootNamespace, "Topology", out var topologyJson))
31+
{
32+
topologyOptions = JsonSerializer.Deserialize<TopologyOptions>(topologyJson);
33+
}
34+
else
2635
{
27-
transport.Topology = TopicTopology.Single(connectionSettings.TopicName);
36+
var options = new MigrationTopologyOptions
37+
{
38+
TopicToPublishTo = connectionSettings.TopicName ?? DefaultSingleTopic,
39+
TopicToSubscribeOn = connectionSettings.TopicName ?? DefaultSingleTopic,
40+
PublishedEventToTopicsMap =
41+
{
42+
["ServiceControl.Contracts.CustomCheckFailed"] = "ServiceControl.Contracts.CustomCheckFailed",
43+
["ServiceControl.Contracts.CustomCheckSucceeded"] = "ServiceControl.Contracts.CustomCheckSucceeded",
44+
["ServiceControl.Contracts.HeartbeatRestored"] = "ServiceControl.Contracts.HeartbeatRestored",
45+
["ServiceControl.Contracts.HeartbeatStopped"] = "ServiceControl.Contracts.HeartbeatStopped",
46+
["ServiceControl.Contracts.FailedMessagesArchived"] = "ServiceControl.Contracts.FailedMessagesArchived",
47+
["ServiceControl.Contracts.FailedMessagesUnArchived"] = "ServiceControl.Contracts.FailedMessagesUnArchived",
48+
["ServiceControl.Contracts.MessageFailed"] = "ServiceControl.Contracts.MessageFailed",
49+
["ServiceControl.Contracts.MessageFailureResolvedByRetry"] = "ServiceControl.Contracts.MessageFailureResolvedByRetry",
50+
["ServiceControl.Contracts.MessageFailureResolvedManually"] = "ServiceControl.Contracts.MessageFailureResolvedManually"
51+
}
52+
};
53+
topologyOptions = options;
2854
}
2955

56+
var transport = connectionSettings.AuthenticationMethod.CreateTransportDefinition(connectionSettings, TopicTopology.FromOptions(topologyOptions));
57+
transport.UseWebSockets = connectionSettings.UseWebSockets;
3058
transport.EnablePartitioning = connectionSettings.EnablePartitioning;
3159

32-
transport.ConfigureNameShorteners();
33-
3460
transport.TransportTransactionMode = transport.GetSupportedTransactionModes().Contains(preferredTransactionMode) ? preferredTransactionMode : TransportTransactionMode.ReceiveOnly;
3561

3662
return transport;

src/ServiceControl.Transports.ASBS/AuthenticationMethod.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
public abstract class AuthenticationMethod
77
{
88
public abstract ServiceBusAdministrationClient BuildManagementClient();
9-
public abstract AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings);
9+
public abstract AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings, TopicTopology topology);
1010
}
1111
}

src/ServiceControl.Transports.ASBS/Helper.cs

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/ServiceControl.Transports.ASBS/ServiceControl.Transports.ASBS.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
55
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
6+
<NoWarn>CS0618</NoWarn>
67
</PropertyGroup>
78

89
<ItemGroup>
@@ -15,7 +16,7 @@
1516
<PackageReference Include="Azure.Monitor.Query" />
1617
<PackageReference Include="Azure.ResourceManager.ServiceBus" />
1718
<PackageReference Include="NServiceBus.CustomChecks" />
18-
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" />
19+
<PackageReference Include="NServiceBus.Transport.AzureServiceBus"/>
1920
</ItemGroup>
2021

2122
<ItemGroup>

src/ServiceControl.Transports.ASBS/SharedAccessSignatureAuthentication.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class SharedAccessSignatureAuthentication : AuthenticationMethod
1212
public override ServiceBusAdministrationClient BuildManagementClient()
1313
=> new ServiceBusAdministrationClient(ConnectionString);
1414

15-
public override AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings)
16-
=> new AzureServiceBusTransport(ConnectionString);
15+
public override AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings, TopicTopology topology)
16+
=> new AzureServiceBusTransport(ConnectionString, topology);
1717
}
1818
}

src/ServiceControl.Transports.ASBS/TokenCredentialAuthentication.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Azure.Identity;
55
using Azure.Messaging.ServiceBus.Administration;
66
using NServiceBus;
7-
using NServiceBus.Transport;
87

98
public class TokenCredentialAuthentication : AuthenticationMethod
109
{
@@ -30,9 +29,9 @@ public TokenCredentialAuthentication(string fullyQualifiedNamespace, string clie
3029
public override ServiceBusAdministrationClient BuildManagementClient()
3130
=> new ServiceBusAdministrationClient(FullyQualifiedNamespace, Credential);
3231

33-
public override AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings)
32+
public override AzureServiceBusTransport CreateTransportDefinition(ConnectionSettings connectionSettings, TopicTopology topology)
3433
{
35-
var transport = new AzureServiceBusTransport(FullyQualifiedNamespace, Credential);
34+
var transport = new AzureServiceBusTransport(FullyQualifiedNamespace, Credential, topology);
3635
return transport;
3736
}
3837
}

src/ServiceControl.Transports/ServiceControl.Transports.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
<TargetFramework>net8.0</TargetFramework>
55
</PropertyGroup>
66

7+
<ItemGroup>
8+
<!-- Private=false & ExcludeAssets=runtime prevent repeatedly including binary dependencies of ServiceControl.Transports in each transport directory -->
9+
<ProjectReference Include="..\ServiceControl.Configuration\ServiceControl.Configuration.csproj" Private="false" ExcludeAssets="runtime" />
10+
</ItemGroup>
11+
712
<ItemGroup>
813
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" />
914
<PackageReference Include="NServiceBus" />

0 commit comments

Comments
 (0)