Skip to content

Commit 0cc8cb2

Browse files
authored
Add HierarchyNamespace connection string parameter (#5317)
* Add HierarchyNamespace connection string parameter # Conflicts: # src/Directory.Packages.props * Update manifest with no empty default
1 parent 8fa8b6a commit 0cc8cb2

File tree

5 files changed

+32
-11
lines changed

5 files changed

+32
-11
lines changed

src/ServiceControl.Transports.ASBS.Tests/ConnectionStringParserTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public static IEnumerable<TestCaseData> SupportedConnectionStrings
3737
//EnablePartitioning
3838
yield return new TestCaseData("Endpoint=sb://some.endpoint.name/;EnablePartitioning=True",
3939
new ConnectionSettings(new SharedAccessSignatureAuthentication("Endpoint=sb://some.endpoint.name/;EnablePartitioning=True"), enablePartitioning: true));
40+
//HierarchyNamespace
41+
yield return new TestCaseData("Endpoint=sb://some.endpoint.name/;HierarchyNamespace=my-hierarchy",
42+
new ConnectionSettings(new SharedAccessSignatureAuthentication("Endpoint=sb://some.endpoint.name/;HierarchyNamespace=my-hierarchy"), hierarchyNamespace: "my-hierarchy"));
4043
}
4144
}
4245

@@ -86,4 +89,4 @@ public void VerifyNotSupported(string connectionString)
8689
Assert.Throws<Exception>(() => ConnectionStringParser.Parse(connectionString));
8790
}
8891
}
89-
}
92+
}

src/ServiceControl.Transports.ASBS/ASBSTransportCustomization.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ protected override AzureServiceBusTransport CreateTransport(TransportSettings tr
4242
var transport = connectionSettings.AuthenticationMethod.CreateTransportDefinition(connectionSettings, selectedTopology);
4343
transport.UseWebSockets = connectionSettings.UseWebSockets;
4444
transport.EnablePartitioning = connectionSettings.EnablePartitioning;
45+
if (!string.IsNullOrWhiteSpace(connectionSettings.HierarchyNamespace))
46+
{
47+
transport.HierarchyNamespaceOptions = new HierarchyNamespaceOptions { HierarchyNamespace = connectionSettings.HierarchyNamespace };
48+
}
4549

4650
transport.TransportTransactionMode = transport.GetSupportedTransactionModes().Contains(preferredTransactionMode) ? preferredTransactionMode : TransportTransactionMode.ReceiveOnly;
4751

@@ -67,7 +71,8 @@ protected override void AddTransportForPrimaryCore(IServiceCollection services,
6771
{
6872
TopicToPublishTo = connectionSettings.TopicName,
6973
TopicToSubscribeOn = connectionSettings.TopicName,
70-
EventsToMigrateMap = [
74+
EventsToMigrateMap =
75+
[
7176
"ServiceControl.Contracts.CustomCheckFailed",
7277
"ServiceControl.Contracts.CustomCheckSucceeded",
7378
"ServiceControl.Contracts.HeartbeatRestored",

src/ServiceControl.Transports.ASBS/ConnectionSettings.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ public ConnectionSettings(AuthenticationMethod authenticationSettings,
88
string topicName = default,
99
bool useWebSockets = default,
1010
bool enablePartitioning = default,
11-
TimeSpan? queryDelayInterval = default)
11+
TimeSpan? queryDelayInterval = default,
12+
string hierarchyNamespace = default)
1213
{
1314
AuthenticationMethod = authenticationSettings;
1415
TopicName = topicName;
1516
UseWebSockets = useWebSockets;
1617
EnablePartitioning = enablePartitioning;
1718
QueryDelayInterval = queryDelayInterval;
19+
HierarchyNamespace = hierarchyNamespace;
1820
}
1921

2022
public AuthenticationMethod AuthenticationMethod { get; }
@@ -26,5 +28,7 @@ public ConnectionSettings(AuthenticationMethod authenticationSettings,
2628
public bool UseWebSockets { get; }
2729

2830
public bool EnablePartitioning { get; }
31+
32+
public string HierarchyNamespace { get; }
2933
}
3034
}

src/ServiceControl.Transports.ASBS/ConnectionStringParser.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public static ConnectionSettings Parse(string connectionString)
3535
{
3636
throw new Exception($"Can't parse {value} as a valid query delay interval.");
3737
}
38+
3839
queryDelayInterval = TimeSpan.FromMilliseconds(delayInterval);
3940
}
4041

@@ -72,18 +73,25 @@ public static ConnectionSettings Parse(string connectionString)
7273
}
7374
}
7475

76+
string hierarchyNamespace = null;
77+
if (builder.TryGetValue("HierarchyNamespace", out var hierarchyNamespaceString))
78+
{
79+
hierarchyNamespace = (string)hierarchyNamespaceString;
80+
}
81+
7582
var shouldUseManagedIdentity = builder.TryGetValue("Authentication", out var authType) && (string)authType == "Managed Identity";
7683

7784
if (shouldUseManagedIdentity)
7885
{
7986
var fullyQualifiedNamespace = endpoint.ToString().TrimEnd('/').Replace("sb://", "");
8087

8188
return new ConnectionSettings(
82-
new TokenCredentialAuthentication(fullyQualifiedNamespace, clientIdString),
83-
topicNameString,
84-
useWebSockets,
85-
enablePartitioning,
86-
queryDelayInterval);
89+
new TokenCredentialAuthentication(fullyQualifiedNamespace, clientIdString),
90+
topicNameString,
91+
useWebSockets,
92+
enablePartitioning,
93+
queryDelayInterval,
94+
hierarchyNamespace);
8795
}
8896

8997
if (clientIdString != null)
@@ -96,7 +104,8 @@ public static ConnectionSettings Parse(string connectionString)
96104
topicNameString,
97105
useWebSockets,
98106
enablePartitioning,
99-
queryDelayInterval);
107+
queryDelayInterval,
108+
hierarchyNamespace);
100109
}
101110
}
102-
}
111+
}

src/ServiceControl.Transports.ASBS/transport.manifest

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"DisplayName": "Azure Service Bus",
66
"AssemblyName": "ServiceControl.Transports.ASBS",
77
"TypeName": "ServiceControl.Transports.ASBS.ASBSTransportCustomization, ServiceControl.Transports.ASBS",
8-
"SampleConnectionString": "Endpoint=sb://[namespace].servicebus.windows.net; SharedSecretIssuer=<owner>;SharedSecretValue=<someSecret>;QueueLengthQueryDelayInterval=<IntervalInMilliseconds(Default=500ms)>;TopicName=<TopicBundleName(Default=bundle-1)>;EnablePartitioning=<true|false(Default=false)>",
8+
"SampleConnectionString": "Endpoint=sb://[namespace].servicebus.windows.net; SharedSecretIssuer=<owner>;SharedSecretValue=<someSecret>;QueueLengthQueryDelayInterval=<IntervalInMilliseconds(Default=500ms)>;TopicName=<TopicBundleName(Default=bundle-1)>;EnablePartitioning=<true|false(Default=false)>;HierarchyNamespace=<hierarchyNamespacePrefix>",
99
"AvailableInSCMU": true,
1010
"Aliases": [
1111
"ServiceControl.Transports.AzureServiceBus.AzureServiceBusTransport, ServiceControl.Transports.AzureServiceBus"

0 commit comments

Comments
 (0)