【问题标题】:How to achieve Azure Queue for large size Images?如何实现大尺寸图像的 Azure Queue?
【发布时间】:2019-08-08 06:53:56
【问题描述】:

问题: 我们希望允许用户上传图像并将它们保存在 azure blob 中。如果 azure blob 关闭,那么我们将丢失这些图像,因此我们希望在客户端和 Blob 之间放置一个队列。

想法是,当用户上传图片时,它应该进入队列,然后应该从后端 API 中提取到 Azure blob 存储。

Azure 存储队列和服务总线的大小限制仅为 64kb 和 1mb。

我可以使用哪些其他选项来实现这一目标?

*已编辑更多信息。

【问题讨论】:

  • 将图像上传到 Blob 存储,并将图像的 URI 发送到队列。
  • 我是否应该期望 blob 的行为与 Queue 相同?基本上,如果我使用 Blob,那么我需要使用队列吗?
  • 您的问题中没有足够的信息来说明您在做什么,包括什么/如何将事物放入队列、哪个进程正在从队列中接收事物以及什么您在处理队列时正在做的事情。如果您想通知进程图像已准备好通过队列进行处理,则将要处理的图像写入 blob 存储,然后在队列上发送一条消息,并带有指向该文件所在位置的指针,这就是我的全部我建议。为了进一步澄清,您同时使用了 blob 存储队列。

标签: azure message-queue azureservicebus azure-servicebus-queues azure-storage-queues


【解决方案1】:

只需将图像放在 Azure Blob 存储上,然后在 Blob 存储上使用触发器创建 Azure 函数。这是预期的方式,不要使用队列它不是为了它。

[FunctionName("BlobTriggerCSharp")]        
public static void Run(
     [BlobTrigger("samples-workitems/{name}")] Stream myBlob, 
     string name, 
     ILogger log)
{
    log.LogInformation($"C# Blob trigger for \n Name:{name} \n Size: {myBlob.Length} bytes");
}

【讨论】:

  • 我刚刚用更多信息更新了我的问题。我想在客户端和 azure blob 之间有一个队列。这是错误的设计吗?
  • 老实说有点,因为似乎不需要它。我检查了你更新的答案,你仍然没有说为什么,你只是说你想要它在中间。通常,blob 用于文件,队列用于消息。只要保持这样,你会没事的。如果出于某种原因需要队列,请将文件放在 blob 上,将文件 URL 放在消息队列上。
  • 嘿亚当,可能是我对队列的理解不清楚或没有解释这个权利。队列不是用作缓冲机制吗?因此,如果 Blob 服务关闭并且用户上传了图像,那么我们可以将该图像保存在队列中,当 Blob 服务启动时,它可以从队列中读取图像并插入到 Blob 存储中。这里的 blob 服务将是自定义 web api。
  • 嘿。没问题,让我解释一下。它们不是缓冲区,但可以作为一个缓冲区,但绝对不适用于服务停机场景。虽然,它们大多被设计为为基于事件的处理架构保存短暂的消息。请注意,队列和 Blob 都是一项服务的一部分,因此如果一项服务出现故障,很可能两者都会发生。如果发生临时停机,您应该在客户端上实施重试策略。在 C# 中有 polly 库,但存储 SDK 将重试策略作为内置功能处理。请随时查看我的视频。 youtu.be/UzTtastcBsk
  • 如果这对您有帮助,请随时将此主题标记为已回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多