我目前有一个azure函数,它处理来自服务总线的DLQ的消息。我想要实现的是尝试手动处理它,但是如果它不能成功地将消息转发回DLQ,并且基于自定义逻辑进行处理3次。我正在接收ServiceBusReceivedMessage对象,但是当我试图将它发送回DLQ时,要么通过创建一个新的ServiceBusClient,要么通过使用ServiceBusMessageActions,我要么得到一个The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue, or was received by a different receiver instance. (MessageLockLost)。或者是InvalidException。
我想要做的事情是可以实现的吗?或者我应该创建一个新的ServiceBusMessage并将消息重新提交到原始队列中,而不是直接提交给DLQ?
这是重新提交所有内容的代码:
try
{
var serviceBusClient = new ServiceBusClient(Environment.GetEnvironmentVariable("ConnectionString"), new ServiceBusClientOptions()
{
});
var receiver = serviceBusClient.CreateReceiver(Environment.GetEnvironmentVariable("QueueName"), new ServiceBusReceiverOptions()
{
SubQueue = SubQueue.DeadLetter,
});
await receiver.DeadLetterMessageAsync(dlqItem, deadLetterReason: Constants.DLQReason);
//Above method not working. Bellow neither
//await messageActions.DeadLetterMessageAsync(dlqItem, deadLetterReason: Constants.DLQReason);
} catch (Exception ex)
{
log.LogError($"MessageId: {dlqItem.MessageId}. There was an error sending the message to DLQ: {ex.Message}");
throw;
}谢谢!
发布于 2022-07-06 17:00:31
当收到来自死信队列的消息时,它已经是死信,不需要再用死字。只要在窥视锁定模式下收到死信消息,消息就会保持在DLQ中。如果您在接收和删除模式下接收到消息,它将从代理中消失,不能进行DLQ编辑。
你需要小心,不要在这里自己动手。如果一个函数被配置为从DLQ接收并且不能处理消息,它将继续接收该消息,除非它已经完成。
https://stackoverflow.com/questions/72887234
复制相似问题