Поскольку в коде уже используется верблюд Apache, мы попытались использовать компонент camel azure-blob для решения этой проблемы.Ниже представлен подход, который мы использовали, , однако, условия гонки приемлемы для нашего сценария .Верблюжий маршрут начался с потребителя таймера и производителя, чтобы получить список больших двоичных объектов из контейнера, используя указанную ниже конечную точку,
azure-blob://<account>/<container>?credentials=#storagecredentials&blobType=blockBlob&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>
Ключевая вещь: В этом методе процесса класса
- проверить, установлены или нет метаданные, если установлено, то процесс уже выбран BLOB-объектом.поэтому он не будет выбран снова, если процесс, выполненный на другом сервере .
- , получил имя большого двоичного объекта из отдельного элемента большого двоичного объекта ListBlobItem.используя getURI () и формируя конечную точку в этом классе процессора.чтобы вызвать пользовательскую конечную точку, используется для установки значения заголовка клиента в сообщении In.
с использованием параметра верблюда receientList, который вызывает конечную точку метаданных для обновления конкретного большого двоичного объекта.
Затем использовал другой процессор, чтобы сформировать конечную точку BLOB-объекта загрузки
azure-blob://<account>/<container>/*<blobName>*?credentials=#storagecredentials&blobType=blockBlob&operation=getBlob
, и с помощью receientList получить конечную точку процессора из заголовка сообщения.
наконец сформировал другую конечную точку удаления, котораяудалит его после загрузки.