【发布时间】:2021-01-09 02:51:31
【问题描述】:
我有一个以下 azure storage queue trigger azure function,它绑定到 azure table 以进行输出。
[FunctionName("TestFunction")]
public static async Task<IActionResult> Run(
[QueueTrigger("myqueue", Connection = "connection")]string myQueueItem,
[Table("TableXyzObject"), StorageAccount("connection")] IAsyncCollector<TableXyzObject> tableXyzObjectRecords)
{
var tableAbcObject = new TableXyzObject();
try
{
tableAbcObject.PartitionKey = DateTime.UtcNow.ToString("MMddyyyy");
tableAbcObject.RowKey = Guid.NewGuid();
tableAbcObject.RandomString = myQueueItem;
await tableXyzObjectRecords.AddAsync(tableAbcObject);
}
catch (Exception ex)
{
}
return new OkObjectResult(tableAbcObject);
}
public class TableXyzObject : TableEntity
{
public string RandomString { get; set; }
}
}
}
我正在寻找一种从毒队列中读取 15 条消息的方法,该消息不同于 myqueue(上述 azure 函数上的队列触发器),并根据队列消息中的少数条件将其批量插入动态表(tableXyz、tableAbc 等) .由于我们有不同的毒物队列,我们想从多个毒物队列中提取消息(毒物队列的名称将在 myqueue 消息中提供)。这样做是为了避免每次我们有一个新的毒物队列时都启动新的 azure 函数。
以下是我的想法,
--> 我可能必须使用 queueClient(创建新的)方法获取 15 条队列消息 - Azure.Storage.Queue 包的 ReceiveMessages(15)
--> 并使用 TableBatchOperation 类进行批量插入(不能使用输出绑定)
还有比这更好的方法吗?
【问题讨论】:
-
您正在使用 QueueTrigger,但随后想在排队的触发器函数中将 ReceiveMessages() 调用回同一个队列? Azure Functions 已经具有存储队列触发器的并发性(默认为 16 个进程)。使用 ReceiveMessages() 似乎没有意义。你可以解释吗?如果您出于某种原因不能使用输出绑定,那么使用 TableBatchOp 进行插入是有意义的。
-
抱歉给您带来了困惑。此处的队列(myqueue)触发器与我要从中读取消息的队列不同。
标签: azure .net-core azure-functions azure-table-storage azure-queues