是否可以从Azure WebJobs QueueInput项生成唯一的BlobOutput名称?

时间:2014-05-29 16:03:17

标签: azure azure-webjobs

我有一个连续的Azure WebJob,它运行QueueInput,生成报告,并将文件输出到BlobOutput。此作业将针对不同的数据集运行,每个数据都需要唯一的输出文件。 (保证输入的数量会随着时间的推移而显着缩放,因此我无法为每个输入编写单个作业。)我希望能够从QueueInput运行它,但我找不到设置方法输出基于QueueInput值,或除blob输入名称之外的任何值。

作为一个例子,这基本上就是我想要做的,虽然它是无效代码而且会失败。

public static void Job([QueueInput("inputqueue")] InputItem input, [BlobOutput("fileoutput/{input.Name}")] Stream output)
{
    //job work here
}

我知道我可以做一些类似if I used BlobInput而不是QueueInput的事情,但我更愿意使用队列来完成这项工作。我是否遗漏了某些内容或正在生成QueueInput的唯一不可能的输出?

2 个答案:

答案 0 :(得分:1)

有两种选择:

  1. 使用IBInder生成blob名称。如these samples
  2. 中所示
  3. 在队列消息对象中自动生成并将blob名称绑定到该属性。请参阅here(BlobNameFromQueueMessage方法)如何将队列消息属性绑定到blob名称

答案 1 :(得分:1)

通过Advanced bindings with the Windows Azure Web Jobs SDKCurah's Complete List of Web Jobs Tutorials and Videos找到解决方案。

引用后代:

  

一种方法是使用IBinder接口绑定输出blob并指定等于order id的名称。更好更简单的方法(SimpleBatch)是将blob名称占位符绑定到队列消息属性:

public static void ProcessOrder(
[QueueInput("orders")] Order newOrder,
[BlobOutput("invoices/{OrderId}")] TextWriter invoice)
{
    // Code that creates the invoice
}
  

blob名称中的{OrderId}占位符从newOrder对象的OrderId属性中获取其值。例如,newOrder是(JSON):{“CustomerName”:“Victor”,“OrderId”:“abc42”}然后输出blob名称是“invoices / abc42”。占位符区分大小写。

因此,您可以在QueueInput字符串中引用BlobOutput对象中的各个属性,它们将被正确填充。