查找在服务总线订阅中排队超过10秒的所有消息



我需要查看特定主题订阅上的所有消息,并检查是否有消息排队超过10秒。

我没有管理访问

似乎有不同的方法可能

private async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
var timeEnqueued = message.SystemProperties.EnqueuedTimeUtc;
var duration = (DateTime.UtcNow - timeEnqueued).TotalSeconds;
if (duration > 10)
{
_messages.Add(message);
}
}
var subscriptionClient = new SubscriptionClient(_configurationProvider.TopicListen, StaticSettings.TopicName, subscriptionName);
var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
{
MaxConcurrentCalls = 1,
AutoComplete = false,
MaxAutoRenewDuration = TimeSpan.FromMinutes(5),
};
_messages.Clear();
subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
var body = $"{_messages.Count} found in Service Bus Subscription.  Please check";

上面的逻辑将不起作用,因为消息是从一个单独的线程中读取的

如何等待消息全部被阅读?

有更简单的方法吗?

我想使用PeekBatch方法,但我的订阅客户端没有这种方法?

有什么想法吗?

干杯

Paul

您可以尝试的一件事是用这10秒设置消息的生存时间。之后,它们将过期,但您可以将它们移到死信队列中。

(EnableDeadLetteringOnMessageExpiration(

更多信息:

https://learn.microsoft.com/en-us/azure/service-bus-messaging/message-expiration

https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues

最新更新