queue - Azure 函数和队列
问题描述
我有一个功能:
public async static Task Run([QueueTrigger("efs-api-call-last-datetime", Connection = "StorageConnectionString")]DateTime queueItem,
[Queue("efs-api-call-last-datetime", Connection = "StorageConnectionString")]CloudQueue inputQueue,
TraceWriter log)
{
然后我有很长的过程来处理来自队列的消息。问题是消息将在 30 秒后被读取到队列中,而我正在处理此消息。我不需要添加此消息并对其进行两次处理。我想要这样的代码:
try
{
// long operation
}
catch(Exception ex)
{
// something wrong. Readd this message in 1 minute
await inputQueue.AddMessageAsync(new CloudQueueMessage(
JsonConvert.SerializeObject(queueItem)),
timeToLive: null,
initialVisibilityDelay: TimeSpan.FromMinutes(1),
options: null,
operationContext: null
);
}
并防止自动读取它。有什么办法吗?
解决方案
这里有几件事。
1)当有多个队列消息在等待时,队列触发器取出一批消息并发调用函数实例进行处理。默认情况下,批量大小为 16。但这可在 Host.json 中配置。如果要最小化并行执行,可以将批量大小设置为 1。Microsoft 文档对此进行了解释。
2)由于它是长时间运行的过程,因此您的消息似乎不完整,并且该功能可能会超时并且消息再次可见。您应该尝试将您的功能分解为更小的功能。然后您可以使用持久功能,它将链接您必须做的工作。
推荐阅读
- python - 查找每类 TF-IDF 得分最高的前 n 个术语
- android - 获取,失败 [INSTALL_FAILED_OLDER_SDK:installPackageLI 期间解析失败
- java - Javafx 无法加载新添加的图像
- php - 如何使用 ajax 将 json 数据发送到 php 文件
- python - Django Forms - 验证错误显示两次
- kotlin - 控制器接收具有空字段的对象
- azure - 无法从 Microsoft Graph API 获取邮件
- r - 如何将变量中的类别转换为缺失数据?
- python - Pivot / Groupby 数据框在索引列中具有非数字数据的重复项
- php - 如何改变 ”
“ 至 ”“通过 PHP 代码?