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

问题描述 投票:0回答:1

我有一个要求 窥视 在特定主题订阅的所有消息,并检查是否有超过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的方法,但是我的订阅客户端没有这个方法?

有什么好办法吗?

欢呼

保罗

c# azure servicebus
1个回答
0
投票

有一件事你可以试试设置消息的生存时间为10秒。之后,他们将得到过期,但你使他们被移动到死信队列。

(EnableDeadLetteringOnMessageExpiration)

更多信息。

https:/docs.microsoft.comen-usazureservice-bus-messagingmessag-expiration。

https:/docs.microsoft.comen-usazureservice-bus-messagingservice-bus-dead-letter-queues。

© www.soinside.com 2019 - 2024. All rights reserved.