我有一个要求 窥视 在特定主题订阅的所有消息,并检查是否有超过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的方法,但是我的订阅客户端没有这个方法?
有什么好办法吗?
欢呼
保罗
有一件事你可以试试设置消息的生存时间为10秒。之后,他们将得到过期,但你使他们被移动到死信队列。
(EnableDeadLetteringOnMessageExpiration)
更多信息。
https:/docs.microsoft.comen-usazureservice-bus-messagingmessag-expiration。
https:/docs.microsoft.comen-usazureservice-bus-messagingservice-bus-dead-letter-queues。