如何从触发器队列消息中的特定字段动态绑定存储 blob 名称

How to bind the storage blob name dynamically from a particular field inside trigger queue message

我正在尝试为触发的消息(队列)做一些日志记录,这样如果消息失败并且下次它被 webjob 拾取,我会记录一些信息,这样我就不会重做成功路径(比如在 stage1 之后向客户发送消息)。 所以我计划使用 azure blob 存储绑定来配置输入和输出流。但为了做到这一点,我需要一个唯一的 blob 名称。我在消息中有一个 guid,我计划使用该 guid 从 blob 存储 read/write。 如何从队列消息内的 guid 字段动态配置此 blob 存储名称绑定。 (我的消息很大,我不想将整个消息用作 blob 存储名称)。

public static void ProcessQueueMessage([QueueTrigger("%testQueue%")],
TestMessageModel testMessage,
[Blob("testStorage/{queueTrigger}", FileAccess.ReadWrite)] Stream logstream)
{

}

如您所见,官方文档仅使用queueTrigger,它使用消息中的字符串作为blob名称。但是我的消息看起来像这样大

public class TestMessageModel
{
  public Guid Id {get; set;}
  public int FromOrg {get; set;}
  public DateTime BatchDate {get; set;}
  public Payments[] payments {get; set;}  // this array is big (many items)
}

我不想使用一些可笑的东西作为 blob 名称。 如何使用testMessage里面的Id?

  1. 添加与 Storage Blob 的输出集成。并将路径值设置为容器名称。

  1. 在您的函数代码中,您可以直接使用容器,并创建一个具有特定名称的 blob(您可以从队列消息中获取):

  1. 最后,您将能够在目标容器中看到具有特定名称的 blob。

供您参考的文档: Storage Blob Output Usage

感谢@jack 贾。那有帮助。但是对于 webjob,我需要先使用 Blob 才能正确绑定它。

public static void ProcessQueueMessage([QueueTrigger("%testQueue%")],
TestMessageModel testMessage,
[Blob("testStorage")] CloudBlobContainer blobContainer)
{
   CloudBlockBlob blockBlob = blobContainer.GetBlockBlobReference(testmessage.id+".txt");
}