Как лучше всего отслеживать изменения в контейнере в хранилище BLOB-объектов Azure? - PullRequest
5 голосов
/ 17 января 2012

Я ищу лучший способ отслеживать контейнер / папку в хранилище BLOB-объектов Azure на предмет изменений.До сих пор я нашел только один способ сделать это - запустить рабочий процесс где-нибудь, который регулярно проверяет содержимое контейнера для поиска изменений.

Есть ли лучший способ?

Ответы [ 7 ]

9 голосов
/ 27 февраля 2014

Storage SDK не предоставляет этого, но это основная функция в новом WebJobs SDK. Есть атрибут [BlobInput], который позволяет вам указать контейнер для прослушивания, и он включает в себя эффективный приемник BLOB-объектов, который будет отправлять методу при обнаружении новых BLOB-объектов. Вот несколько примеров прослушивания блобов: http://blogs.msdn.com/b/jmstall/archive/2014/02/18/azure-storage-bindings-part-1-blobs.aspx

Вот пример использования:

    public static void CopyWithStream(
        [BlobInput("container/in/{name}")] Stream input,
        [BlobOutput("container/out1/{name}")] Stream output
        )
    {
        Debug.Assert(input.CanRead && !input.CanWrite);
        Debug.Assert(!output.CanRead && output.CanWrite);

        input.CopyTo(output);
    }

И слушатель блобов находится здесь:

        JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host
        host.RunAndBlock();  
4 голосов
/ 17 января 2012

Как уже говорили другие, опрос в приемлемом интервале для вашего приложения в порядке.Но вам не нужно проверять сам контент.Вы можете проверить ETag (если используете простой HTTP) или BlobProperties.LastModifiedUtc , если вы используете API.

1 голос
/ 09 октября 2012

Предполагая, что у вас есть контроль над кодом, который обновляет / изменяет большой двоичный объект, вы можете использовать SignalR для генерирования push-уведомления при каждом изменении большого двоичного объекта, тем самым избегая необходимости повторного опроса.

1 голос
/ 17 января 2012

Игорь прав, в том, что вам нужно будет опросить контейнер. Я просто хотел кое-что прояснить. Когда вы сказали:

запустить где-нибудь рабочий процесс, который регулярно проверяет содержимое контейнера для поиска изменений

Рабочий процесс может быть потоком в веб-роли или рабочей роли, в цикле Run () и т. Д. Он не требует отдельной роли. Просто убедитесь, что ваш код опроса работает с несколькими экземплярами ролей (например, вы можете захотеть использовать некоторый тип аренды блобов в качестве мьютекса, чтобы убедиться, что вы опрашиваете только из одного экземпляра). Это также можно сделать с помощью очередей Azure, поскольку сообщения очереди теперь поддерживают тайм-аут невидимости при создании сообщения.

1 голос
/ 17 января 2012

лучшего способа нет, ИМХО. Сожалею. НТН

0 голосов
/ 02 января 2019

Старая проблема, но я исследовал эту тему и обнаружил, что теперь вы можете использовать Сетка событий Azure (не путать с событием Azure Концентраторы ), чтобы получать уведомления при изменениях в хранилище больших двоичных объектов:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-event-overview

0 голосов
/ 17 января 2012

Содержит ли аналитика хранилища Azure необходимую информацию?Вам все равно нужно что-то сделать для опроса.

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