Доступ к файлу хранилища BLOB-объектов Azure несколькими узлами Azure - PullRequest
0 голосов
/ 11 июня 2018

У меня есть несколько файлов формата 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).

Новое в хранилище BLOB-объектов Azure, любая помощь приветствуется.

1 Ответ

0 голосов
/ 23 июня 2018

Поскольку в коде уже используется верблюд Apache, мы попытались использовать компонент camel azure-blob для решения этой проблемы.Ниже представлен подход, который мы использовали, , однако, условия гонки приемлемы для нашего сценария .Верблюжий маршрут начался с потребителя таймера и производителя, чтобы получить список больших двоичных объектов из контейнера, используя указанную ниже конечную точку,

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

Примечание: storagecredential - это компонент класса StorageCredentialsAccountAndKey.

Создан javaкласс, реализующий Processor из camel, и метод process (), использующий exchange.getIn (). getBody () =>, который предоставляет итеративный объект с ListBlobItem.

сначала я устанавливаю метаданныеBLOB-объект, используя указанную ниже конечную точку

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

Примечание: blobMetaData1 - это компонент, созданный в контекстном файле.

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

Ключевая вещь: В этом методе процесса класса

  1. проверить, установлены или нет метаданные, если установлено, то процесс уже выбран BLOB-объектом.поэтому он не будет выбран снова, если процесс, выполненный на другом сервере .
  2. , получил имя большого двоичного объекта из отдельного элемента большого двоичного объекта ListBlobItem.используя getURI () и формируя конечную точку в этом классе процессора.чтобы вызвать пользовательскую конечную точку, используется для установки значения заголовка клиента в сообщении In.

с использованием параметра верблюда receientList, который вызывает конечную точку метаданных для обновления конкретного большого двоичного объекта.

Затем использовал другой процессор, чтобы сформировать конечную точку BLOB-объекта загрузки

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

, и с помощью receientList получить конечную точку процессора из заголовка сообщения.

наконец сформировал другую конечную точку удаления, котораяудалит его после загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...