首页 > 解决方案 > 如何从触发队列消息中的特定字段动态绑定存储 blob 名称

问题描述

我正在尝试为触发的消息(队列)做一些日志记录,这样如果消息失败并且下次它被 webjob 拾取,我会记录一些信息,这样我就不会重做成功路径(比如发送在第一阶段之后给客户的消息)。所以我打算使用 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?

标签: c#azure-blob-storageazure-webjobssdk

解决方案


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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

供您参考的文档: 存储 Blob 输出使用情况


推荐阅读