【问题标题】:Azure blob storage file being accessed by multiple azure nodes多个 Azure 节点正在访问 Azure Blob 存储文件
【发布时间】:2018-11-20 05:52:12
【问题描述】:

我有多个 JSON 格式文件被推送到特定容器下的 Azure 存储帐户。容器中有n个文件。

还有4到8个节点将访问Azure存储容器下载文件到本地,下载代码是java写的。

由于有n个文件,多个文件同时访问容器,如何避免同一个文件被另一台服务器下载的情况?

Example:
 Azure container has 1.json, 2.json, 3.json, etc which are > 35 MB size.
 batch-process-node1 -> starts downloading 1.json
 batch-process-node2 -> starts downloading 2.json
 batch-process-node3 -> should not start downloading the 1.json 

是否为每个具有唯一下载文件的 java 进程的节点构建任何逻辑? Azure 存储容器中是否有可以设置的设置?

--

尝试使用 Camel Azure-bolb 组件,使用块 blob (blobType)。

Azure 存储 blob 的新手,感谢您提供任何帮助。

【问题讨论】:

  • 你想避免服务器节点同时下载文件还是只下载文件?
  • 如果任何文件被一个服务器节点选择下载,相同的文件不应该可供其他服务器节点下载。如果这有帮助。
  • 目前正在探索使用camel azure-blob组件的选项,在分布式环境中下载blob。

标签: azure apache-camel azure-blob-storage


【解决方案1】:

由于我们已经在代码中使用了 Apache camel,因此我们尝试使用 camel azure-blob 组件来解决该问题。以下是我们使用的方法,我们的场景仍然可以接受竞争条件。 骆驼路线从计时器消费者开始,生产者使用以下端点从容器中获取 blob 列表,

azure-blob://<account>/<container>?credentials=#storagecredentials&amp;blobType=blockBlob&amp;operation=listBlobs

注意:storagecredential 是 StorageCredentialsAccountAndKey 类类型的 bean。

创建了一个实现骆驼处理器的java类,在process()方法中,使用exchange.getIn().getBody() =>,它提供了一个带有ListBlobItem的可迭代对象。

首先我使用下面的端点设置 blob 的元数据

azure-blob://<account>/<container>/*<blobName>*?credentials=#storagecredentials&blobType=blockBlob&operation=updateBlockBlob&blobMetadata=#blobMetaData1

注意:blobMetaData1 是在上下文文件中创建的 bean。

 <util:map id="blobMetaData1" map-class="java.util.HashMap">
        <entry key="someKey" value="someValue"/>
 </util:map>

关键点:在这个类处理方法中

  1. 验证元数据是否被设置,如果设置了,那么 进程已经选择了blob。所以不会再被选中 假设如果进程在不同的服务器上执行
  2. 从 ListBlobItem 单个 blob 项中获取 blob 名称。 使用 getURI() 并在此处理器类中形成端点。 为了调用自定义端点,用于将其设置为客户 In 消息的标头值。

使用接收者列表骆驼选项调用元数据端点来更新特定的 blob。

然后使用另一个处理器形成下载 blob 端点

  azure-blob://<account>/<container>/*<blobName>*?credentials=#storagecredentials&blobType=blockBlob&operation=getBlob  

并使用接收者列表从消息头中获取处理器端点。

最终形成另一个删除端点,一旦下载就会删除。

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 2020-06-03
    • 2021-12-18
    • 2021-07-09
    • 2014-05-10
    相关资源
    最近更新 更多