gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:58:00 25 4
gpt4 key购买 nike

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

知道如何从订阅死信队列中删除特定消息吗?我正在使用 .net core 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中可以通过其sequenceNumber接收消息SDK。很遗憾。看起来 Track 1 SDK 失去了该选项。

任何发现此问题/答案的人都应该查看SDK issue .

关于Azure服务总线从订阅的死信队列中删除特定消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63836010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com