繁体   English   中英

Azure 服务总线从订阅的死信队列中删除特定消息

[英]Azure Service Bus Deleting specific message from deadletter queue of a subscription

我正在使用下面的代码尝试从订阅的死信队列中删除特定消息。 我正在使用 PeekBySequenceNumberAsync 来获取特定消息。 问题是该方法显然没有设置锁定令牌。 我收到以下错误:“提供的锁无效。锁已过期,或消息已从队列中删除,或已被其他接收方实例接收。”

关于如何从订阅死信队列中删除特定消息的任何想法? 我正在使用 .net 核心 Microsoft.Azure.ServiceBus 库。

    public async Task<bool> DeleteMessage(long sequenceNumber, string topicPath, string subscriptionName, bool deadLettered = false)
    {
        bool success = false;

        string connectionString = Environment.GetEnvironmentVariable("SB_CONNECTION_STRING");

        MessageReceiver receiver = null;
        try
        {
            string path = EntityNameHelper.FormatSubscriptionPath(topicPath, subscriptionName);

            if (deadLettered)
                path = EntityNameHelper.FormatDeadLetterPath(path);

            receiver = new MessageReceiver(connectionString, path, ReceiveMode.PeekLock );

            var message = await receiver.PeekBySequenceNumberAsync(sequenceNumber);


            // If we have found the message
            if (message != null)
            {
                await receiver.CompleteAsync(message.SystemProperties.LockToken);
                success = true;

            }
            else
            {
                Console.WriteLine("Message with sequence number: " + sequenceNumber.ToString() + " was not found");
            }

        }
        catch (ServiceBusException e)
        {
            if (!e.IsTransient)
            {
                Console.WriteLine(e.Message);
            }
        }
        finally
        {
            if (receiver!=null)
                await receiver.CloseAsync();
        }

        return success;

    }

你不应该偷看消息,而是接收它。 窥视操作不会获取消息锁,因为其预期用途是“浏览”消息的内容。

Track 0 SDK 中可以通过sequenceNumber号接收消息。 很遗憾。 看起来 Track 1 SDK 失去了那个选项。

找到此问题/答案的任何人都应查看SDK 问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM