我有这个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)
触发器正在正常激活,但这种奇怪的行为正在发生。该函数显然希望message以Base-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 …
我是 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
我有一个 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
我设置了一个天蓝色队列触发器:
[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) 我正在尝试在 Azure 门户中开发一个 Azure 函数 (Node.js),该函数在创建文档时由 Cosmos DB 触发。Azure 文档说要这样做,首先我必须从模板中选择“Cosmos db 触发器”,但我的函数中没有模板出现......只出现 HTTP 和定时器触发器选项。我想使用 CosmosDB 和 IoTHUB 作为触发器,输入输出。有没有被忽略的要求?为什么我没有更多触发器选项?需要指导。
我刚刚将数十 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 触发器?以便该功能再次触发,就像我刚刚重新上传文件一样......而不必再次传输任何数据!