0

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

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

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

我知道如果我使用BlobInput而不是,我可以做类似的事情QueueInput,但我更喜欢使用队列来完成这项工作。我是否遗漏了某些东西,或者正在从QueueInput不可能的情况下生成独特的输出?

4

2 回答 2

1

有两种选择:

  1. 用于IBInder生成 blob 名称。如这些示例中所示
  2. 在队列消息对象中自动生成并将 blob 名称绑定到该属性。请参阅此处(BlobNameFromQueueMessage 方法)如何将队列消息属性绑定到 blob 名称
于 2014-05-29T20:45:55.343 回答
1

通过Curah 的 Web 作业教程和视频的完整列表,在与 Windows Azure Web 作业 SDK的高级绑定中找到了解决方案 。

后人报价:

一种方法是使用 IBinder 接口绑定输出 blob 并指定等于订单 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,它们将被正确填充。

于 2014-05-30T14:42:30.280 回答