【问题标题】:How to remove message from a queue after peek?偷看后如何从队列中删除消息?
【发布时间】:2020-06-23 13:28:02
【问题描述】:

我从队列中获取了一批消息,然后选择我要查找的消息,那么,如何将其余消息移回队列?或者只是将我需要的那个标记为不再可用?

var receiverClient = new MessageReceiver("ConnectionString", "MyQueue");

// getting a list of 100 
var messageList = await receiverClient.PeekAsync(100);

var myMessage = messageList?.Where(x => x.MessageId == "MessageGuid").FirstOrDefault();

在那之后,我尝试做这样的事情:

await receiverClient.RenewLockAsync(myMessage);
await receiverClient.CompleteAsync(myMessage.SystemProperties.LockToken);

但那失败了,我认为一定与我得到一批队列的事实有关。有什么想法吗?

我认为的另一种方法是创建另一个客户端(一个能够发送消息的客户端),然后使用 Receive() 而不是 Peek() 但我确实有 2 个客户端,而且我的过程也会慢一点

【问题讨论】:

    标签: azureservicebus azure-servicebus-queues


    【解决方案1】:

    您需要Receive()Peek-Lock 模式下的消息,并在您希望发送回队列的消息上调用Abandon(),在您希望从队列中删除的消息上调用Complete() .

    【讨论】:

    • 我无法在不需要的消息中使用Abandon(),但是由于我现在设置了您建议的Peek-Lock,因此保留在队列中,我只使用Complete(),谢谢!
    猜你喜欢
    • 2014-06-07
    • 2012-03-20
    • 1970-01-01
    • 2013-04-19
    • 2016-09-21
    • 2015-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多