【问题标题】:Multiple Azure function apps pointing to one Blob container(trigger)指向一个 Blob 容器的多个 Azure 函数应用程序(触发器)
【发布时间】:2019-05-18 07:20:54
【问题描述】:

在我们的开发环境中,我们有多个运行同一个函数应用的环境,但这些环境都指向同一个存储帐户/blob 容器。

我注意到,当插入 blob 时,在多个环境中的 blob 触发器能够一次拾取同一个 blob。我确信从那时起这将是一个问题是显而易见的。

有什么办法可以防止吗?建议使用更好的触发器来处理这种情况?

我本来希望收据对于 blob 来说是全局的,而不是特定于环境的。

【问题讨论】:

  • 抱歉,只是要求澄清一下:所以您有多个函数应用程序指向同一个 blob 容器,并且它们都在插入 blob 时触发并且您想要防止这种行为,或者是相反的方式?

标签: azure azure-storage azure-functions azure-blob-storage


【解决方案1】:

运行 Azure Functions 的函数运行时/主机(在每个本地环境中)彼此隔离,因此它们都扫描传入的 blob 并分别存储收据。

在内部,每个主机都会创建自己的队列消息(传入的 blob 信息)以供 Blob 触发器使用。我的建议是使用集中队列。

  1. 当使用代码插入 blob 时,将消息(blob 名称)发送到队列。如果我们使用门户或存储资源管理器手动上传 Blob,我建议创建一个带有队列输出绑定的 Blob 触发器以发送消息,请注意此触发器应仅在一台主机上运行。在这里使用 blob 触发器是一个糟糕的解决方案,因为我们实际上检索了两次 blob,但这是我可以提供手动上传的唯一方法。

    // v2 C# Blob Trigger sample for manual upload
    public static void Run([BlobTrigger("mycontainer/{name}")]Stream myBlob, 
        [Queue("myqueue")]out string message,
        string name, ILogger log)
    {
        log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}");
        message = name;
    }
    
  2. 使用队列触发器来使用来自该队列的消息,然后使用 Blob 输入绑定获取 Blob。通过这种方式,我们可以确保在所有主机中检索一次 blob。

    // v2 C# sample
    public static void Run([QueueTrigger("myqueue")]string blobName, ILogger log,
        [Blob("mycontainer/{queuetrigger}",FileAccess.Read)]Stream myBlob)
    {
        log.LogInformation($"C# Queue trigger function processed: {blobName}");
        log.LogInformation($"\n Size: {myBlob.Length} Bytes");
    }
    

如果您使用 v1 功能,本地开发还有另一个简单的解决方案。通过这些设置,所有主机中的 Blob 触发器共享相同的内部队列和 Blob 收据。

  1. local.settings.json 中,确保每个Function 项目都具有相同的AzureWebJobsStorage 值(blob 收据、内部队列等位于何处)。
  2. host.json中,为每个主机添加相同的id(用于构造blob接收和内部队列的名称),例如"id":"localhost-1300897049"

【讨论】:

  • 杰瑞...感谢您提供的信息。我很欣赏解释和选择。在我们的例子中,我认为我们决定切换到上传 blob 并使用显式 Http Trigger 调用来启动该函数。这样,调用完全由调用它的环境控制。 Blob 触发器似乎是个好主意,但考虑到这一点,我们开始远离它们。
猜你喜欢
  • 2018-08-20
  • 2019-08-03
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2021-03-26
  • 2018-08-29
相关资源
最近更新 更多