[英]How to replay messages that have been processed through Azure Service Bus?
[英]Find all messages that have been enqueued in Service Bus subscription for longer than 10 seconds
我需要查看特定主题订阅上的所有消息,并检查是否有任何消息已排队超过 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.com/en-us/azure/service-bus-messaging/message-expiration
https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dead-letter-queues
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.