-
Notifications
You must be signed in to change notification settings - Fork 48
Expand file tree
/
Copy pathDeadLetterQueueCheck.cs
More file actions
53 lines (42 loc) · 2.41 KB
/
DeadLetterQueueCheck.cs
File metadata and controls
53 lines (42 loc) · 2.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
namespace ServiceControl.Transports.ASBS
{
using System;
using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus.Administration;
using Microsoft.Extensions.Logging;
using NServiceBus.CustomChecks;
using ServiceControl.Infrastructure;
public class DeadLetterQueueCheck : CustomCheck
{
public DeadLetterQueueCheck(TransportSettings settings) : base(id: "Dead Letter Queue", category: "Transport", repeatAfter: TimeSpan.FromHours(1))
{
Logger.LogDebug("Azure Service Bus Dead Letter Queue custom check starting");
connectionString = settings.ConnectionString;
stagingQueue = $"{settings.EndpointName}.staging";
runCheck = settings.RunCustomChecks;
}
public override async Task<CheckResult> PerformCheck(CancellationToken cancellationToken = default)
{
if (!runCheck)
{
return CheckResult.Pass;
}
Logger.LogDebug("Checking Dead Letter Queue length");
var managementClient = new ServiceBusAdministrationClient(connectionString);
var queueRuntimeInfo = await managementClient.GetQueueRuntimePropertiesAsync(stagingQueue, cancellationToken);
var deadLetterMessageCount = queueRuntimeInfo.Value.DeadLetterMessageCount;
if (deadLetterMessageCount > 0)
{
Logger.LogWarning("{DeadLetterMessageCount} messages in the Dead Letter Queue '{StagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.", deadLetterMessageCount, stagingQueue);
return CheckResult.Failed($"{deadLetterMessageCount} messages in the Dead Letter Queue '{stagingQueue}'. This could indicate a problem with ServiceControl's retries. Please submit a support ticket to Particular if you would like help from our engineers to ensure no message loss while resolving these dead letter messages.");
}
Logger.LogDebug("No messages in Dead Letter Queue");
return CheckResult.Pass;
}
string connectionString;
string stagingQueue;
bool runCheck;
static readonly ILogger Logger = LoggerUtil.CreateStaticLogger(typeof(DeadLetterQueueCheck));
}
}