首页 > 解决方案 > 当一条消息无法在 ServiceBusTrigger Azure 函数中处理时,如何将同一条消息延迟处理 x 分钟?

问题描述

我有一个从 ServiceBus 主题读取并调用 3rd 方服务的天蓝色函数。如果服务关闭,我想等待 5 分钟,然后再尝试使用相同的消息再次调用它。如何添加延迟以使 azure 函数不会放弃消息并立即将其重新拾取?

public static void Run([ServiceBusTrigger("someTopic", 
     "someSubscription", AccessRights.Manage, Connection = 
     "ServiceBusConnection")] BrokeredMessage message) 
{
     CallService(bodyOfBrokeredMessage); //service is down

     //How do I add a delay so the message won't be reprocessed immediately thus quickly exhausting it's max delivery count?
}

标签: c#azureazure-functionsazureservicebusazure-servicebus-topics

解决方案


一种选择是创建一条新消息并将该消息提交到队列,但将 ScheduledEnqueueTimeUtc 设置为未来五分钟。

        [FunctionName("DelayMessage")]
        public static async Task DelayMessage(
            [ServiceBusTrigger("MyQueue", AccessRights.Listen, Connection = "MyConnection")]BrokeredMessage originalMessage,
            [ServiceBus("MyQueue", AccessRights.Send, Connection = "MyConnection")]IAsyncCollector<BrokeredMessage> newMessages,
            TraceWriter log)
        {
            //handle any kind of error scenerio

            var newMessage = originalMessage.Clone();

            newMessage.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddMinutes(5);

            await newMessages.AddAsync(newMessage);

        }

推荐阅读