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<ServiceBusTopicTrigger1> _logger;

        public ServiceBusTopicTrigger1(ILogger<ServiceBusTopicTrigger1> 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值