не может использовать BlobContainerAsyncClient для вывода списка BLOB-объектов - PullRequest
1 голос
/ 09 мая 2020

Я хочу вывести список больших двоичных объектов из контейнера, используя azure java sdk версии 12.0.6. Чтобы добиться хорошей производительности, я использую метод asyn c с классом BlobContainerAsyncClient. Но я не могу перечислить капли с классом и не получаю никаких ошибок.

Мой код

ListBlobsOptions options = new ListBlobsOptions()
            .setDetails(new BlobListDetails()
                .setRetrieveDeletedBlobs(true)
                .setRetrieveSnapshots(true));

        client.listBlobs(options).subscribe(blob ->
            System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                blob.getName(),
                blob.isPrefix(),
                blob.isDeleted(),
                blob.getSnapshot()));

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Что касается проблемы, обратитесь к следующему коду

ListBlobsOptions options = new ListBlobsOptions()
            .setDetails(new BlobListDetails()
                .setRetrieveDeletedBlobs(true)
                .setRetrieveSnapshots(true));
lient.listBlobs(options).doOnNext(blob ->
            System.out.printf("Name: %s, Directory? %b, Deleted? %b, Snapshot ID: %s%n",
                blob.getName(),
                blob.isPrefix(),
                blob.isDeleted(),
                blob.getSnapshot()))
             .blockLast();

введите описание изображения здесь

Кроме того, нельзя одновременно звонить на subscribe() и block(). Когда вы вызываете subscribe(), вы получаете ответ Disposable, который позволяет вам отменить операцию asyn c, но вы не можете заблокировать этот объект. Если вы хотите, чтобы рассматриваемый метод блокировался, вы просто вызываете block() в операции (тип, который имеет метод block(), - Mono или, возможно, Flux).

0 голосов
/ 10 мая 2020

Две вещи, которые вы должны попробовать:

  1. Используйте API-интерфейсы syn c и убедитесь, что вы получите ожидаемый ответ. Если вы получаете ожидаемые результаты, это исключает проблемы, связанные с аутентификацией, именами контейнеров и т. Д.
  2. Поскольку ваш код выше asyn c, вы должны быть уверены, что приложение не закрывается до получения ответа от службы. Если бы вы могли обновить листинг кода выше, чтобы более полно показать, что вы делаете, мы можем это исключить. Для повышения уверенности вы также можете выбрать одно из двух действий, чтобы временно повысить уверенность в правильности вашего asyn c кода:
    1. Временно добавить вызов Thread.sleep(5000) после вашего вызова подписки.
    2. Замените вызов .subscribe() вызовом .block(), фактически превратив запрос обратно в вызов c *.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...