gpt4 book ai didi

c# - Azure功能与Servicebus如何不将消息标记为完成

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:07 26 4
gpt4 key购买 nike

我有一个 Azure 函数,用于监听 Azure Servicebus 队列中的消息。当它收到消息时,它将它们标记为完成并且它们不再位于队列中。有没有办法将它们标记为仅当一个长过程完成时?或者如果失败则取消将它们标记为完整?

我的函数调用 Api,我希望在 Api 返回成功代码之前不要将消息标记为完成。

最佳答案

When it receives the messages it marks them as complete and they are no longer in the queue.

默认情况下,Functions 运行时实际上不会将消息标记为完整 until your function returns successfully 。正如已接受的答案中所提到的,抛出异常(在您的情况下,如果被调用的 API 返回不利的响应)将放弃该消息并阻止其被标记为完成。

为了更好地控制消息何时完成、放弃等,您可以将消息用作 BrokeredMessage类型如前所述。此类直接支持您控制消息发生的情况所需的方法。请注意,service bus trigger documentation提到 BrokeredMessage 应该用于 Azure Functions 版本 1.*。如果您使用的是 2.* 版本,则应将消息用作 Message改为键入。

使用 Message 的一个痛点是,与 BrokeredMessage 不同,它没有直接让您控制消息何时完成等的方法。为了达到这个目的,我们可以绑定(bind)一个MessageReceiver我们函数的参数。

为了展示其工作原理,这里有一个使用 MessageMessageReceiver 的死信示例:

[FunctionName("SOExampleFunction"]
public static async Task ProcessMessage(
[ServiceBusTrigger("myqueue")] Message message,
MessageReceiver messageReceiver)
{
. . .

await messageReceiver.DeadLetterAsync(message.SystemProperties.LockToken);

. . .
}

使用此方法时,请确保在 host.json 中将“autoComplete”服务总线设置设置为 false。例如:

{
"version": "2.0",
"extensions": {
"serviceBus": {
"messageHandlerOptions": {
"autoComplete": false
}
}
}
}

关于c# - Azure功能与Servicebus如何不将消息标记为完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44009647/

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