Skip to content

Commit e1e3d44

Browse files
committed
Support ASB Geo-Recovery alias for querying queue names
1 parent 703c13a commit e1e3d44

File tree

3 files changed

+16
-1
lines changed

3 files changed

+16
-1
lines changed

src/Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
<PackageVersion Include="Azure.ResourceManager.ServiceBus" Version="1.1.0" />
1313
<PackageVersion Include="ByteSize" Version="2.1.2" />
1414
<PackageVersion Include="Caliburn.Micro" Version="4.0.230" />
15+
<PackageVersion Include="DnsClient" Version="1.8.0" />
1516
<PackageVersion Include="FluentValidation" Version="11.11.0" />
1617
<PackageVersion Include="Fody" Version="6.9.1" />
1718
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />

src/ServiceControl.Transports.ASBS/AzureQuery.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ namespace ServiceControl.Transports.ASBS;
1818
using Azure.ResourceManager.Resources;
1919
using Azure.ResourceManager.ServiceBus;
2020
using BrokerThroughput;
21+
using DnsClient;
22+
using DnsClient.Protocol;
2123
using Microsoft.Extensions.Logging;
2224

2325
public class AzureQuery(ILogger<AzureQuery> logger, TimeProvider timeProvider, TransportSettings transportSettings)
@@ -263,14 +265,25 @@ async Task<IReadOnlyList<MetricValue>> GetMetrics(string queueName, DateOnly sta
263265
public override async IAsyncEnumerable<IBrokerQueue> GetQueueNames(
264266
[EnumeratorCancellation] CancellationToken cancellationToken = default)
265267
{
268+
var validNamespaces = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { serviceBusName };
269+
270+
var dnsLookup = new LookupClient();
271+
var dnsResult = await dnsLookup.QueryAsync($"{serviceBusName}.servicebus.windows.net", QueryType.CNAME, cancellationToken: cancellationToken);
272+
var domain = (dnsResult.Answers.FirstOrDefault() as CNameRecord)?.CanonicalName.Value;
273+
if (domain is not null && domain.EndsWith(".servicebus.windows.net."))
274+
{
275+
var otherName = domain.Split('.').First();
276+
validNamespaces.Add(otherName);
277+
}
278+
266279
SubscriptionResource? subscription = await armClient!.GetDefaultSubscriptionAsync(cancellationToken);
267280
var namespaces =
268281
subscription.GetServiceBusNamespacesAsync(cancellationToken);
269282

270283
await foreach (var serviceBusNamespaceResource in namespaces.WithCancellation(
271284
cancellationToken))
272285
{
273-
if (serviceBusNamespaceResource.Data.Name == serviceBusName)
286+
if (validNamespaces.Contains(serviceBusNamespaceResource.Data.Name))
274287
{
275288
resourceId = serviceBusNamespaceResource.Id;
276289
await foreach (var queue in serviceBusNamespaceResource.GetServiceBusQueues()

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<PackageReference Include="Azure.Identity" />
1515
<PackageReference Include="Azure.Monitor.Query" />
1616
<PackageReference Include="Azure.ResourceManager.ServiceBus" />
17+
<PackageReference Include="DnsClient" />
1718
<PackageReference Include="NServiceBus.CustomChecks" />
1819
<PackageReference Include="NServiceBus.Transport.AzureServiceBus" />
1920
</ItemGroup>

0 commit comments

Comments
 (0)