Поскольку мы уже используем Apache camel в коде, мы попытались использовать компонент camel azure-blob для решения этой проблемы. Ниже представлен использованный нами подход, все же состояние гонки приемлемо для нашего сценария. Маршрут верблюда начался с потребителя таймера и производителя, чтобы получить список больших двоичных объектов из контейнера, используя конечную точку ниже,
azure-blob://<account>/<container>?credentials=#storagecredentials&blobType=blockBlob&operation=listBlobs
Примечание. Storagecredential - это bean-компонент типа StorageCredentialsAccountAndKey class.
Создал java-класс, реализующий Processor of camel, и метод process (), используя exchange.getIn (). GetBody () =>, который предоставляет итерируемый объект с ListBlobItem.
сначала я устанавливаю метаданные большого двоичного объекта, используя конечную точку ниже
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>
Ключевой момент: в этом методе процесса класса
- проверьте, установлены ли метаданные или нет, если установлено, то процесс уже выбрал большой двоичный объект. поэтому он не будет выбран снова, если процесс выполняется на другом сервере.
- получил имя большого двоичного объекта из отдельного элемента большого двоичного объекта ListBlobItem. используя getURI () и формируя конечную точку в этом классе процессора. для вызова настраиваемой конечной точки, используемой для установки значения заголовка клиента сообщения In.
с помощью параметра recipientList camel, который вызывает конечную точку метаданных для обновления определенного большого двоичного объекта.
Затем использовал другой процессор для формирования конечной точки загрузки большого двоичного объекта.
azure-blob://<account>/<container>/*<blobName>*?credentials=#storagecredentials&blobType=blockBlob&operation=getBlob
и используя список получателей, чтобы получить конечную точку процессора из заголовка сообщения.
наконец, формируется еще одна конечная точка удаления, которая будет удалена после загрузки.
person
Tim
schedule
22.06.2018