如何在Azure Service Bus主题上删除DeadLetter消息

Luk*_*ett 9 c# queue azure dead-letter azureservicebus

我正在写一段代码,这将允许我们:

  1. 查看Azure Service Bus主题(Peek)中存在的所有死信消息的列表
  2. 修复并将它们发送回主题
  3. 重新发送时从死信队列中删除它们.

前2分我没有问题; 使用Peek接收模式,我可以显示消息列表,我们可以编辑和重新发送,没有任何问题.

当我想从死信队列中删除消息时,问题就来了.

我们如何通过消息级别对消息执行此操作?我们可能只想删除驻留在死信队列中的2条消息,并保留其他消息以便稍后查看.调用.Complete()死信队列中的消息是否像在主订阅中那样删除它?

以供参考; 这是我们获取SubscriptionClient死信队列的代码:

private SubscriptionClient GetOrCreateSubscriptionClient(string connectionString)
{
    if (!NamespaceManager.TopicExists(_topicName))
    {
        NamespaceManager.CreateTopic(new TopicDescription(_topicName)
        {
            MaxSizeInMegabytes = 5120,
            DefaultMessageTimeToLive = TimeSpan.FromSeconds(DEFAULT_LOCK_DURATION_IN_SECONDS)
        });
    }

    if (!NamespaceManager.SubscriptionExists(_topicName, _subscriptionName))
    {
        NamespaceManager.CreateSubscription(_topicName, _subscriptionName);
    }

    var deadLetterPath = SubscriptionClient.FormatDeadLetterPath(_topicName, _subscriptionName);

    var client = SubscriptionClient.CreateFromConnectionString(
        connectionString, deadLetterPath, _subscriptionName, ReceiveMode.PeekLock);

    return client;

}
Run Code Online (Sandbox Code Playgroud)

Mik*_*eWo 9

是的,对从死信队列中收到的代理消息的引用调用完成将从死信队列中删除它.