Начало работы с Хранилищем очередей Azure с помощью языка F#
Хранилище очередей Azure — это служба, обеспечивающая обмен сообщениями в облаке между компонентами приложения. При разработке приложений для масштабирования компоненты приложения часто не связаны между собой, так что они могут масштабироваться независимо друг от друга. Хранилище очередей обеспечивает асинхронный обмен сообщениями для взаимодействия между компонентами приложения независимо от того, где они выполняются: в облаке, на рабочем столе, локальном сервере или мобильном устройстве. Хранилище очередей также поддерживает управление асинхронными задачами и создание рабочих процессов.
О данном учебникев этом руководстве показано, как написать код F # для некоторых распространенных задач с помощью служба хранилища очереди Azure. В число описываемых задач входят создание и удаление очередей, а затем Добавление, чтение и удаление сообщений очереди.
Предварительные требования
Для работы с этим руководством необходимо сначала создать учетную запись хранения Azure. Вам также потребуется ключ доступа к хранилищу для этой учетной записи.
Создание скрипта F # и запуск F # Interactive
Примеры в этой статье можно использовать как в приложении F #, так и в сценарии F #. Чтобы создать скрипт F #, создайте файл с .fsx расширением, queues.fsx например, в среде разработки F #.
Выполнение скриптовF# Interactive, dotnet fsi , можно запустить в интерактивном режиме или запустить из командной строки, чтобы выполнить сценарий. Синтаксис командной строки
Добавление пакетов в скриптЗатем используйте #r nuget:package name для установки Azure.Storage.Queues пакета и open пространств имен. Например,
Добавление объявлений пространств именДобавьте в начало файла queues.fsx следующие инструкции open :
Получение строки подключениядля работы с этим руководством вам потребуется строка подключения служба хранилища Azure. дополнительные сведения о строках подключения см. в разделе настройка строк подключения служба хранилища.
В этом руководстве вы введете строку подключения в сценарий следующим образом:
Создание клиента службы очередейКласс QueueClient позволяет получать очереди, хранящиеся в хранилище очередей. Вот один из способов создания клиента:
Теперь вы можете написать код, который считывает и записывает данные в хранилище очередей.
Создание очереди
В этом примере показано, как создать очередь, если она еще не существует:
Вставка сообщения в очередь
Чтобы вставить сообщение в существующую очередь, сначала создайте новое сообщение. Затем вызовите метод SendMessage . Сообщение может быть создано из строки (в формате UTF-8) или byte массива следующим образом:
Просмотр следующего сообщения
Можно взглянуть на сообщение в начале очереди, не удаляя его из очереди, вызвав PeekMessage метод.
Получить следующее сообщение для обработки
Вы можете получить сообщение в начале очереди для обработки, вызвав ReceiveMessage метод.
Позднее вы указываете успешное выполнение сообщения с помощью DeleteMessage .
Изменение содержимого сообщения в очереди
Вы можете изменить содержимое извлеченного сообщения на месте в очереди. Если сообщение представляет собой рабочую задачу, можно использовать эту функцию для обновления состояния рабочей задачи. Следующий код добавляет новое содержимое в очередь сообщений и продлевает время ожидания видимости еще на 60 секунд. Это сохраняет состояние работы, связанной с данным сообщением, и позволяет клиенту продолжить работу с сообщением на протяжении еще одной минуты. Этот метод можно использовать для отслеживания многошаговых рабочих процессов по сообщениям в очереди без необходимости начинать с самого начала в случае сбоя шага обработки в связи с ошибкой аппаратного или программного обеспечения. Как правило, вы также сохраняете число повторных попыток, и если сообщение повторяется несколько раз, его можно удалить. Это обеспечивает защиту от сообщений, которые инициируют ошибку приложения при каждой попытке обработки.
Удаление следующего сообщения из очереди
Код удаляет сообщение из очереди в два этапа. При вызове метода ReceiveMessage вы получаете следующее сообщение в очереди. Сообщение, возвращаемое методом ReceiveMessage , становится невидимым для другого кода, считывающего сообщения из этой очереди. По умолчанию это сообщение остается невидимым в течение 30 секунд. Чтобы завершить удаление сообщения из очереди, необходимо также вызвать метод DeleteMessage . Этот двухэтапный процесс удаления сообщения позволяет удостовериться, что если коду не удастся обработать сообщение из-за сбоя оборудования или программного обеспечения, другой экземпляр кода сможет получить то же сообщение и повторить попытку. Код вызывает DeleteMessage сразу после обработки сообщения. Все методы очереди, представленные выше, имеют Async альтернативы.
Использование асинхронных рабочих процессов с общими интерфейсами API хранилища очередей
В этом примере показано, как использовать асинхронный рабочий процесс с общими интерфейсами API хранилища очередей.
Дополнительные параметры для удаления сообщений из очереди
Способ извлечения сообщения из очереди можно настроить двумя способами. Во-первых, можно получить пакет сообщений (до 32 сообщений). Во-вторых, можно задать более длительное или короткое время ожидания видимости, чтобы предоставить коду больше или меньше времени на полную обработку каждого сообщения. В следующем примере кода используется ReceiveMessages для получения 20 сообщений в одном вызове и последующей обработки каждого сообщения. Он также задает время ожидания невидимости 5 минут для каждого сообщения. 5 минут начинается для всех сообщений в одно и то же время, поэтому через 5 минут после вызова ReceiveMessages , все сообщения, которые не были удалены, снова станут видимыми.
Получение длины очереди
Вы можете узнать приблизительное количество сообщений в очереди. GetProperties Метод запрашивает у служба очередей получение атрибутов очереди, включая число сообщений. ApproximateMessagesCount Свойство возвращает последнее значение, GetProperties полученное методом.
Удаление очереди
Чтобы удалить очередь и все сообщения в ней, вызовите метод Delete для объекта очереди.
Примечание
Если вы выполняете миграцию из старых библиотек, они по умолчанию кодируются сообщения в кодировке Base64, но новые библиотеки не являются более производительными. Дополнительные сведения о настройке кодировки см. в разделе MessageEncoding .