如何获取 Azure 服务总线背后的底层 MessageReceiver 引用触发 Azure Function V3
How to get underlying MessageReceiver reference behind an Azure Service Bus triggered Azure Function V3
我已将我的 Azure 函数配置为在触发 Azure 函数时不发送 'autoComplete' 消息。我的问题是我需要自己将消息标记为完成,并在事务的上下文中这样做(如下)。此使用 'via' 路由的事务在控制台应用程序中有效,但由于缺少对使消息出列的原始接收方的引用,因此在 Azure 中失败。
如何获取底层接收器引用以便我可以自动完成和发送?似乎无法在 Azure Functions 中执行此操作。
using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
try
{
await receiver.CompleteAsync(completeMessage.SystemProperties.LockToken);
for (var i = 0; i <= sendMessages.Length - 1; i++)
await sender.SendAsync(sendMessages[i]);
ts.Complete();
}
catch (Exception ex)
{
// This rolls back send and complete in case an exception happens
}
}
如果没有原始接收方引用(以及您自己新创建的引用),您会得到以下异常:
ERROR: Microsoft.Azure.ServiceBus.MessageLockLostException: 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.
您需要注入函数使用的消息接收器来接收传入的消息。注入是通过函数参数完成的。 This post 进入细节。
我已将我的 Azure 函数配置为在触发 Azure 函数时不发送 'autoComplete' 消息。我的问题是我需要自己将消息标记为完成,并在事务的上下文中这样做(如下)。此使用 'via' 路由的事务在控制台应用程序中有效,但由于缺少对使消息出列的原始接收方的引用,因此在 Azure 中失败。
如何获取底层接收器引用以便我可以自动完成和发送?似乎无法在 Azure Functions 中执行此操作。
using (var ts = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
try
{
await receiver.CompleteAsync(completeMessage.SystemProperties.LockToken);
for (var i = 0; i <= sendMessages.Length - 1; i++)
await sender.SendAsync(sendMessages[i]);
ts.Complete();
}
catch (Exception ex)
{
// This rolls back send and complete in case an exception happens
}
}
如果没有原始接收方引用(以及您自己新创建的引用),您会得到以下异常:
ERROR: Microsoft.Azure.ServiceBus.MessageLockLostException: 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.
您需要注入函数使用的消息接收器来接收传入的消息。注入是通过函数参数完成的。 This post 进入细节。