c# - 当一条消息无法在 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?
}
解决方案
一种选择是创建一条新消息并将该消息提交到队列,但将 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);
}
推荐阅读
- django - django搜索返回一个空白页
- ios - iOS - WKURLSchemeHandler 未在自定义方案上调用
- python - 使用模板中的表单从购物车中删除在 Django 中不起作用
- reactjs - React Query useInfiniteQuery 使单个项目无效
- powerbi - 基于列过滤 PowerBI 度量
- django - Django-apps.py 无法识别
- javascript - 数组之和 - JS
- html - 为什么我的 Bootstrap [4.2] 导航栏切换器不工作?
- pine-script - 坚持交易视图策略
- visual-studio - 创建引用引用的 .dll 而不使用 .nuspec 的 nuget 包