0

我设置了一个天蓝色队列触发器:

    [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
    }
  }
}
4

1 回答 1

1

谢谢你成为我的橡皮鸭。

写完之后,我很快意识到 azure storage explorer 的“新消息”之间唯一不同的是编码。

将消息编码切换为 Base64 后,它开始工作。

于 2022-03-01T07:43:39.707 回答