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

时间:2019-07-15 16:51:19

标签: c# azure-storage-blobs azure-webjobssdk

我正在尝试对触发的消息(队列)进行一些日志记录,以便如果消息失败并在下次由Webjob接收时,我将记录一些信息,以便不再重做成功路径(例如在stage1之后向客户端发送消息)。 因此,我计划使用azure blob存储绑定将其配置为输入和输出流。但是为了做到这一点,我需要为Blob提供一个唯一的名称。我在消息中有一个GUID,我计划使用该GUID从Blob存储中进行读取/写入。 如何从队列消息内的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?

2 个答案:

答案 0 :(得分:1)

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

enter image description here

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

enter image description here

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

enter image description here

文档供您参考: Storage Blob Output Usage

答案 1 :(得分:-1)

感谢@jack Jia。有帮助。但是对于网络作业,我需要先使用Blob才能正确绑定它。

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