Azure Functions Service Bus Trigger

Azure Functions 的 service bus trigger 默认采用的是peeklock模式,该模式下,如果functions收到消息后,整个functions执行成功,则functions框架会在function成功后,将service bus的消息标定为 complete,如果functions执行时失败,则标定为 abandon,  如果functions的运行时间长于peeklock超时时间,如果functions还在执行,则会自动续订lock。

关于 message lock duration和 Max delivery count的信息,可以在代码执行时通过日志查看:

namespace Company.Function
{public class ServiceBusTopicTrigger1{private readonly ILogger _logger;public ServiceBusTopicTrigger1(ILogger log){_logger = log;}[FunctionName("ServiceBusTopicTrigger1")]public void Run([ServiceBusTrigger("topic-01", "sub-01", Connection = "demofunctions_SERVICEBUS")]string mySbMsg, Int32 deliveryCount){_logger.LogInformation($"C# ServiceBus topic trigger function processed message: {mySbMsg}");_logger.LogInformation($"DeliveryCount={deliveryCount}");Thread.Sleep(40000);}}
}

假定 message Lock duration设定为10,Max delivery Count设定为1:

如果Functions 收到一条消息,将消息锁定10秒,且Functions 需要50秒才可以执行完成,则如果Function还在执行,则锁会自动续订。

如果Functions收到一条消息,将消息锁定10秒,此时Functions异常退出了,则消息将在锁定期10秒后进入死信队列。

假定 message Lock duration设定为10,Max delivery Count设定为10:

如果Functions收到一条消息,将消息锁定10秒,此时Functions异常退出了,则消息将在锁定期10秒后会重新进入队列供订阅者消费,此时Functions如果再次运行,则可以收到 develivery count =2 的消息,则消息会被第二次执行消费。如果第二次消费Functions不出错,则消息从队列中移除,如果还出错,则消息会继续被放回队列,再执行第三次,直到 某次执行成功,则消息被消费掉。如果到第10次还是执行失败,则丢入死信队列。

Azure Functions中的 peeklock模式遵照如下规定(C#和Python语言修改位置不同,Python修改functions.json):

AutoComplete属性对peeklock的影响,参见官网:Azure Functions 的 Azure 服务总线触发器 | Microsoft Docs


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部