【问题标题】:Find all messages that have been enqueued in Service Bus subscription for longer than 10 seconds查找在服务总线订阅中排队超过 10 秒的所有消息
【发布时间】:2020-05-01 14:12:53
【问题描述】:

我需要查看特定主题订阅的所有消息,并检查是否有任何消息已排队超过 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 方法,但我的订阅客户端没有此方法?

有什么想法吗?

干杯

保罗

【问题讨论】:

  • 你必须在ProcessMessagesAsync方法里面await看看subscriptionClient是否可以等待结果。

标签: c# azure servicebus


【解决方案1】:

您可以尝试的一件事是将消息的生存时间设置为这 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多