标签: azure-triggers

Azure 函数:队列触发器需要 Base-64 消息,但未正确处理它们

我有这个Queue Trigger。预期是当我在 中插入一条消息时Queue,触发器必须触发并处理出队的消息。

    [FunctionName("NewPayrollQueueTrigger")]
    public async static void Run([QueueTrigger("myqueue", Connection = 
    "AzureWebJobsStorage")]string myQueueItem,
        [DurableClient] IDurableOrchestrationClient starter,
        ILogger log)
    {
        log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");

        await starter.StartNewAsync("NewPayrollOrchestrator", input: myQueueItem);

    }
Run Code Online (Sandbox Code Playgroud)

触发器正在正常激活,但这种奇怪的行为正在发生。该函数显然希望messageBase-64.

异常绑定参数 'myQueueItem' <--- 输入不是有效的 Base-64 字符串,因为它包含非 base-64 字符、两个以上的填充字符或填充字符中的非法字符。

I'm sending messages to the queue using this method from the Azure Queue library v.12 from Azure.Storage.Queues and found no overloads that encodes the message to Base-64. Note that _queue is a …

c# azure-queues .net-core azure-functions azure-triggers

12
推荐指数
3
解决办法
4060
查看次数

如何获取触发Azure数据工厂管道的文件的名称?

我是 ADF 新手。我需要将 15 个 CSV 文件中的数据加载到 15 个 Azure Sql 数据库表中。在管道中,每次创建 blob 时都会有一个触发器来运行管道。

我想让这个管道充满活力。我的 CSV 文件名包含表名。例如,Input_202005 是 csv,表名称是 Input。

同样,我还有 14 个元数据不同的其他文件/表。

因为我想在每次创建 blob 时运行管道,所以我不需要元数据和 foreachfile 活动。我希望每个 blob 的管道并行运行。有没有办法知道哪个 blob/文件触发了管道并获取文件的名称,而无需在触发器中使用任何参数。我不想使用 15 个触发参数。

或者有更好的解决方案来满足我的要求吗?任何建议表示赞赏。

azure azure-data-factory azure-blob-storage azure-triggers azure-blob-trigger

4
推荐指数
1
解决办法
7010
查看次数

从触发 blob 触发 Azure 函数的文件中获取元数据

我有一个 blob 触发器 Azure 函数,每次将新文件添加到我的 blob 存储时都会调用该函数。我自动获取该文件的名称作为输入。除了名称之外,我还需要附加到给定文件的元数据。我一直在研究数据输入绑定,但我无法理解。我需要做什么才能将文件元数据作为输入?或者,甚至只是在我的函数中访问它?

public static void Run(Stream myBlob, string name, TraceWriter log)
{
    string result = DoSomethingWithFileName(name);
    var something = DoSomethingWithFileMetadata();
}
Run Code Online (Sandbox Code Playgroud)

data-binding azure azure-storage-blobs azure-functions azure-triggers

3
推荐指数
1
解决办法
1337
查看次数

Azure 队列触发器立即达到 MaxDequeueCount

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

    [FunctionName("TransformData")]
    public async Task Transform(
        [QueueTrigger("product-prices")] string message)
    {
        await TransformAndLoadData(message);
    }
Run Code Online (Sandbox Code Playgroud)

每当我通过 QueueClient 将项目添加到队列时:
(RawQueueData 将项目拆分为消息批次)

    var rawQueueData = new RawQueueData<T>(data);

    var sendMessageTasks = rawQueueData.Messages
        .Select(m => _queueClient.SendMessageAsync(m));
    
    await Task.WhenAll(sendMessageTasks);
Run Code Online (Sandbox Code Playgroud)

或者将消息从product-prices-poison移回到product-prices队列(使用Azure存储资源管理器),触发器立即失败并显示:

消息已达到 MaxDequeueCount 5。将消息移至产品价格毒药队列。

同步传递项目也会产生同样的问题。

我唯一一次可以成功触发触发器并处理项目是当我使用 Azure 存储资源管理器手动创建消息时。

增加 MaxDequeueCount 或批量大小不会产生影响。执行前者后的消息是:

消息已达到 MaxDequeueCount 100000。正在将消息移至产品价格毒药队列。

我还可以使用 QueueClient 手动将项目出队,没有任何问题。


我还尝试将接收到的对象类型更改为 QueueMessage、对象和字符串。大多数其他解决方案似乎专注于更新软件包(我正在使用最新的 - 稳定版 12.8.0)。

编辑:host.json:

{
  "version": "2.0",
  "extensions": {
    "blobs": {
      "maxDegreeOfParallelism": "4"
    },
    "queues": {
      "maxDequeueCount": 5
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

.net azure azure-queues azure-functions azure-triggers

3
推荐指数
1
解决办法
2362
查看次数

如何使用 Cosmos DB 触发器构建 Azure 函数?

我正在尝试在 Azure 门户中开发一个 Azure 函数 (Node.js),该函数在创建文档时由 Cosmos DB 触发。Azure 文档说要这样做,首先我必须从模板中选择“Cosmos db 触发器”,但我的函数中没有模板出现......只出现 HTTP 和定时器触发器选项。我想使用 CosmosDB 和 IoTHUB 作为触发器,输入输出。有没有被忽略的要求?为什么我没有更多触发器选项?需要指导。

HTTP 和计时器触发器作为唯一选项

选项“更多模板”不会出现在快速启动中

azure node.js azure-functions azure-cosmosdb azure-triggers

2
推荐指数
1
解决办法
297
查看次数

为现有文件重播/重复/重新触发 Azure BlobStorage 函数触发器

我刚刚将数十 GB 的文件上传到 Azure CloudStorage。每个文件都应该由 FunctionApp 获取和处理,以响应BlobTrigger

[FunctionName(nameof(ImportDataFile))]
public async Task ImportDataFile(
    // Raw JSON Text file containing data updates in expected schema
    [BlobTrigger("%AzureStorage:DataFileBlobContainer%/{fileName}", Connection = "AzureStorage:ConnectionString")]
    Stream blobStream,
    string fileName)
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

这在一般情况下有效,但愚蠢的是,在将所有文件上传到我们的 UAT 系统之前,我没有对该功能进行最终测试......并且上传存在问题:(

上传花了几天时间(由于 CoViD-19,我在国内互联网上行链路上运行)所以我真的不想重新这样做。

有什么方法可以“重放” BlobUpload 触发器?以便该功能再次触发,就像我刚刚重新上传文件一样......而不必再次传输任何数据!

azure azure-storage-blobs azure-functions azure-triggers

2
推荐指数
2
解决办法
462
查看次数