Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как создавать арендные записи блобов и управлять ими с помощью библиотеки клиента хранилища Azure для Java. Вы можете использовать клиентскую библиотеку для получения, продления, освобождения и разрыва аренды BLOB-объектов.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Пакет средств разработки Java (JDK) версии 8 или более поздней версии (рекомендуется использовать версию 17 для оптимального взаимодействия)
- Apache Maven используется для управления проектами в этом примере
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Java. Дополнительные сведения см. в разделе "Начало работы с Blob-хранилищем Azure и Java".
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Примечание.
В этой статье используется средство сборки Maven для создания и запуска примера кода. Для работы с пакетами SDK Azure для Java есть и другие средства сборки, например Gradle.
Установка пакетов
Откройте файл pom.xml
в текстовом редакторе. Установите пакеты, включив файл BOM или включив прямую зависимость.
Добавление инструкций импорта
Добавьте следующие инструкции import
:
import com.azure.storage.blob.*;
import com.azure.storage.blob.specialized.*;
Авторизация
Механизм авторизации должен иметь необходимые разрешения для работы с арендой блоб-объектов. Для авторизации с помощью Microsoft Entra ID (рекомендуется), требуется встроенная роль Storage Blob Data Contributor или выше. Дополнительные сведения см. в руководстве по авторизации для BLOB-объекта аренды (REST API).
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient.
В следующем примере используется BLOBServiceClientBuilder для создания BlobServiceClient
объекта с помощью DefaultAzureCredential
и показано, как создать клиенты контейнеров и BLOB-объектов при необходимости:
// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
.endpoint("https://<storage-account-name>.blob.core.windows.net/")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
.getBlobContainerClient("<container-name>");
// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
.getBlobClient("<blob-name>");
Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Сведения об аренде объектов BLOB
Аренда создает и управляет блокировкой объекта BLOB для операций записи и удаления. Длительность блокировки может составлять 15–60 секунд либо быть бесконечной. Аренда большого двоичного объекта обеспечивает монопольный доступ на запись и удаление большого двоичного объекта. Для записи в blob с активной арендой клиент должен указать активный идентификатор аренды в запросе на запись.
Дополнительные сведения о состояниях аренды и о том, когда можно выполнить данное действие по аренде, см. в разделе "Состояния аренды" и действия.
Все операции с контейнером разрешены для контейнера, включающего большие двоичные объекты с активной арендой, включая Удаление контейнера. Поэтому контейнер может быть удален даже в том случае, если в нем есть активные аренды блобов. Используйте операцию аренды контейнера для управления правами на удаление контейнера.
Операции аренды обрабатываются классом BlobLeaseClient, который предоставляет все операции аренды для BLOB и контейнеров. Дополнительные сведения об аренде контейнеров с помощью клиентской библиотеки см. в статье "Создание аренды контейнеров и управление ими с помощью Java".
Получение аренды
Когда вы получаете аренду большого двоичного объекта, вы получаете идентификатор, который ваш код может использовать для работы с этим объектом. Если блоб уже имеет активную блокировку, можно запросить новую блокировку только с помощью активного идентификатора блокировки. Однако можно указать новую длительность аренды.
Чтобы получить аренду, создайте экземпляр класса BlobLeaseClient , а затем используйте следующий метод:
Следующий пример получает 30-секундную аренду для BLOB.
public BlobLeaseClient acquireBlobLease(BlobClient blob) {
// Create the lease client
BlobLeaseClient leaseClient = new BlobLeaseClientBuilder()
.blobClient(blob)
.buildClient();
// Acquire the lease - specify duration between 15 and 60 seconds, or -1 for
// infinite duration
String leaseID = leaseClient.acquireLease(30);
System.out.printf("Acquired lease ID: %s%n", leaseID);
return leaseClient;
}
Продление аренды
Вы можете продлить аренду блока, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с блоком. Аренда может быть продлена даже в том случае, если срок её действия истек, при условии, что BLOB не был изменён или заново арендован после истечения срока действия аренды. При продлении аренды срок аренды обновляется.
Чтобы продлить существующую аренду, используйте следующий метод:
В следующем примере возобновляется аренда блоба:
public void renewBlobLease(BlobLeaseClient leaseClient) {
leaseClient.renewLease();
}
Прекращение договора аренды
Вы можете прекратить аренду объекта BLOB, если идентификатор аренды, указанный в запросе, соответствует идентификатору аренды, связанному с объектом BLOB. Снятие блокировки аренды позволяет другому клиенту получить аренду для объекта BLOB сразу после завершения освобождения.
Вы можете освободить аренду с помощью следующего метода:
В следующем примере освобождается лизинг блоба:
public void releaseBlobLease(BlobLeaseClient leaseClient) {
leaseClient.releaseLease();
System.out.println("Release lease operation completed");
}
Прерывание аренды
Вы можете расторгнуть аренду BLOB, если у BLOB есть активная аренда. Любой авторизованный запрос может разорвать аренду; запрос не требуется для указания соответствующего идентификатора аренды. Аренда не может быть продлена после того, как она нарушена, и разрыв аренды предотвращает получение новой аренды в течение определенного периода времени, пока исходная аренда не истекает или не будет освобождена.
Вы можете разорвать аренду с помощью следующего метода:
В следующем примере прерывается аренда blob:
public void breakBlobLease(BlobLeaseClient leaseClient) {
leaseClient.breakLease();
}
Состояния и действия по аренде
На следующей схеме показаны пять состояний аренды, а также команды или события, вызывающие изменение состояния аренды.
В следующей таблице перечислены пять состояний аренды, краткое описание каждого из них и список действий аренды, разрешенных в заданном состоянии. Эти действия аренды вызывают переходы состояния, как показано на схеме.
Состояние аренды | Описание | Действия по аренде разрешены |
---|---|---|
Доступно | Аренда разблокирована и может быть приобретена. | acquire |
Арендованный | Аренда заблокирована. |
acquire (один и тот же идентификатор аренды), renew , change , release и break |
Срок действия истек | Срок аренды истек. |
acquire , renew , release и break |
Срочные новости | Аренда была нарушена, но аренда будет по-прежнему заблокирована до истечения периода перерыва. |
release и break . |
Неисправно | Аренда была нарушена, и срок перерыва истек. |
acquire , release и break |
По истечении срока аренды идентификатор аренды сохраняется в службе объектного хранения до тех пор, пока объект не будет изменен или арендован снова. Клиент может попытаться продлить или освободить аренду с помощью идентификатора аренды с истекшим сроком действия. Если эта операция выполнена успешно, клиент знает, что блоб не был изменен с тех пор, как идентификатор аренды был в последний раз действителен. Если запрос завершается ошибкой, клиент знает, что объект BLOB был изменен или сдан в аренду снова с момента последней активности аренды. Затем клиент должен получить новую аренду на blob.
Если срок действия аренды истекает, а не освобождается явным образом, клиенту может потребоваться подождать до одной минуты, прежде чем будет получена новая аренда для BLOB. Однако клиент может немедленно продлить аренду, используя идентификатор аренды, если блоб не был изменен.
Аренда не может быть предоставлена для снимка BLOB, так как снимки доступны только для чтения. Запрос на аренду на основе моментального снимка приводит к коду состояния 400 (Bad Request)
.
Ресурсы
Дополнительные сведения об управлении арендой BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Java см. в следующих ресурсах.
Примеры кода
Операции REST API
Пакет SDK Azure для Java содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы Java. Методы клиентской библиотеки для управления арендами блобов используют следующую операцию REST API:
- Lease Blob (Аренда BLOB-объекта)
Ресурсы клиентской библиотеки
См. также
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Java. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Java.