我设置了一个天蓝色队列触发器:
[FunctionName("TransformData")]
public async Task Transform(
[QueueTrigger("product-prices")] string message)
{
await TransformAndLoadData(message);
}
每当我通过 QueueClient 将项目添加到队列时:
(RawQueueData 将项目拆分为消息批次)
var rawQueueData = new RawQueueData<T>(data);
var sendMessageTasks = rawQueueData.Messages
.Select(m => _queueClient.SendMessageAsync(m));
await Task.WhenAll(sendMessageTasks);
或者将消息从product-prices-poison移回product-prices队列(使用 Azure 存储资源管理器),触发器立即失败,并显示:
消息已达到 MaxDequeueCount 5。将消息移动到排队产品价格毒药。
同步传递项目也会产生同样的问题。
只有当我使用 Azure 存储资源管理器手动创建消息时,才能成功地让触发器触发和处理项目。
增加 MaxDequeueCount 或批量大小不会产生影响。执行前者之后的消息是:
消息已达到 100000 的 MaxDequeueCount。将消息移动到队列 product-prices-poison。
我还可以使用 QueueClient 手动使项目出列而不会出现任何问题。
我还尝试将接收到的对象类型更改为 QueueMessage、对象和字符串。大多数其他解决方案似乎都专注于更新软件包(我使用的是最新的 - 稳定版 12.8.0)。
编辑:host.json:
{
"version": "2.0",
"extensions": {
"blobs": {
"maxDegreeOfParallelism": "4"
},
"queues": {
"maxDequeueCount": 5
}
}
}