Опубликован: 25.05.2011 | Доступ: свободный | Студентов: 5925 / 2175 | Оценка: 4.19 / 3.94 | Длительность: 12:28:00
Лекция 8:

Azure Services Platform. Часть 2

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >

Пример

На следующем рисунке представлен пример, иллюстрирующий семантику Windows Azure Queue.

Пример использования очереди

Рис. 7.5. Пример использования очереди

В этом примере поставщики (P1 и P2) и потребители (C1 и C2) обмениваются информацией через представленную выше очередь. Поставщики формируют рабочие элементы и помещают их в виде сообщений в очередь. Потребители изымают сообщения/рабочие элементы из очереди и обрабатывают их. Может существовать множество поставщиков и множество потребителей. Рассмотрим последовательность действий:

  1. C1 извлекает сообщение из очереди. Эта операция возвращает сообщение 1 и делает его невидимым в очереди на 30 секунд (принимаем в данном примере, что используется VisibilityTimeout по умолчанию, что составляет 30 секунд).
  2. Затем появляется C2 и извлекает из очереди другое сообщение. Поскольку сообщение 1 по-прежнему невидимое, эта операция не увидит сообщения 1 и возвратит C2 сообщение 2.
  3. По завершении обработки сообщения 2 C2 вызывает Delete, чтобы удалить сообщение 2 из очереди.
  4. Теперь представим, что C1 дает сбой в ходе обработки сообщения 1, таким образом, C1 не удаляет это сообщение из очереди.
  5. По истечении времени VisibilityTimeout для сообщения 1, оно опять появляется в очереди.
  6. После того, как сообщение 1 повторно появилось в очереди, оно может быть извлечено последующим вызовом от C2. Тогда C2 полностью обработает сообщение 1 и удалит его из очереди.

Как показано в этом примере, семантика API очереди гарантирует каждому сообщению в очереди шанс быть обработанным полностью, по крайней мере, один раз. То есть, если возникает сбой потребителя в период после извлечения им сообщения из очереди и до его удаления, сообщение опять появится в очереди по истечении времени VisibilityTimeout. Это обеспечивает возможность этому сообщению быть обработанным полностью другим потребителем.

Рассмотрим REST-запросы, используемые Windows Azure Queue.

Ниже показан пример REST-запроса для операции постановки в очередь. Заметьте, что используется HTTP-команда PUT. Задается необязательная опция "messagettl", определяющая срок жизни сообщения в секундах. Максимальный срок жизни – 7 дней. Если этот параметр опущен, значение по умолчанию – 7 дней. По истечении срока жизни сообщение будет удалено системой в процессе сборки мусора. Параметр Content-MD5 может быть задан для защиты от ошибок передачи по сети и обеспечения целостности. В данном случае, Content-MD5 – это контрольная сумма MD5 данных сообщения в запросе. Параметр Content-Length (Длина содержимого) определяет размер содержимого сообщения. Также в заголовке HTTP-запроса имеется заголовок авторизации. Обратите внимание, что данные сообщения располагаются в теле HTTP-запроса. Сообщение может храниться в текстовом или двоичном формате, но при извлечении оно возвращается base64-кодированным.

PUT http://sally.queue.core.windows.net/myqueue/messages  
 ? messagettl=3600  
 HTTP/1.1 Content-Length: 3900  
 Content-MD5: HUXZLQLMuI/KZ5KDcJPcOA==  
 Authorization: SharedKey sally: F5a+dUDvef+PfMb4T8Rc2jHcwfK58KecSZY+l2naIao=  
 x-ms-date: Mon, 27 Oct 2008 17:00:25 GMT  
 Message Data Contents ………

Ниже показан пример REST-запроса для операции извлечения из очереди. Заметьте, что используется HTTP-команда GET. Заданы два необязательных параметра. "numofmessages" определяет, сколько сообщений должно быть изъято из очереди; максимальное число – 32. По умолчанию извлекается одно сообщение. В примере ниже будет извлекаться по 2 сообщения. Параметр "visibilitytimeout" определяет время ожидания видимости; сообщение будет оставаться невидимым в очереди, в течение этого промежутка времени, в секундах, и вновь появится в очереди, если не будет удалено до завершения периода ожидания видимости. Максимальное значение этого времени ожидания – 2 часа, и значение по умолчанию – 30 секунд. В примере ниже время ожидания видимости задано равным 60 секундам. Также в заголовке HTTP-запроса имеется элемент авторизации. Обратите внимание, что ответ поступает в XML-формате, и данные сообщения в ответе будут base64-кодированными (в примере ниже располагаются между тегами <MessageText> </MessageText>).

GET http://sally.queue.core.windows.net/myqueue/messages  
 ?numofmessages=2 &visibilitytimeout=60  
 HTTP/1.1  
 Authorization: SharedKey sally: QrmowAF72IsFEs0GaNCtRU143JpkflIgRTcOdKZaYxw=  
 x-ms-date: Thu, 13 Nov 2008 21:37:56 GMT

Ответ на этот вызов будет аналогичен получаемому в следующем примере:

HTTP/1.1 200 OK  
 Transfer-Encoding: chunked  
 Content-Type: application/xml  
 Server: Queue Service Version 1.0 Microsoft-HTTPAPI/2.0  
 x-ms-request-id: 22fd6f9b-d638-4c30-b686-519af9c3d33d  
 Date: Thu, 13 Nov 2008 21:37:56 GMT  
 <?xml version="1.0" encoding="utf-8"?>  
 <QueueMessagesList>  
 <QueueMessage>  
 <MessageId>6012a834-f3cf-410f-bddd-dc29ee36de2a</MessageId>  
 <InsertionTime>Thu, 13 Nov 2008 21:38:26 GMT</InsertionTime>  
 <ExpirationTime>Thu, 20 Nov 2008 21:36:40 GMT</ExpirationTime>  
 <PopReceipt>AAEAAAD/////AQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5RdWV1ZU1hbmFnZ
  XIuWEFDLCBWZXJzaW9uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2VG9rZW49bnVsbAUBAAAAVU1p
  Y3Jvc29mdC5DaXMuU2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZpY2UuUXVldWVNYW5hZ2VyLlhBQy5SZWFsUXVld
  WVNYW5hZ2VyK1JYVpcHQCAAAAFjxNc2dJZD5rX19CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGFydD5rX19CYWNr
  aW5nRmllbGQDAAtTeXN0ZW0uR3VpZA0CAAAABP3///8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9mA
  l9nAl9oAl9pAl9qAl9rAAAAAAAAAAAAAAAIBwcCAgICAgICAjSoEmDP8w9Bvd3cKe423ipfNapL7xPLSAAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</PopReceipt>
 <TimeNextVisible>Thu, 13 Nov 2008 21:38:26 GMT</TimeNextVisible>  
 <MessageText>......</MessageText>  
 </QueueMessage>  
 <QueueMessage>  
 <MessageId>2ab3f8e5-b0f1-4641-be26-83514a4ef0a3</MessageId>  
 <InsertionTime>Thu, 13 Nov 2008 21:38:26 GMT</InsertionTime>  
 <ExpirationTime>Thu, 20 Nov 2008 21:36:40 GMT</ExpirationTime>  
 <PopReceipt>AAEAAAD/////AQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5RdWV1ZU1hbmFn
  ZXIuWEFDLCBWZXJzaW9uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2VG9rZW49bnVsbAUBAAAAVU1
  pY3Jvc29mdC5DaXMuU2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZpY2UuUXVldWVNYW5hZ2VyLlhBQy5SZWFsUXVl
  dWVNYW5hZ2VyK1JYVpcHQCAAAAFjxNc2dJZD5rX19CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGFydD5rX19CYWN
  raW5nRmllbGQDAAtTeXN0ZW0uR3VpZA0CAAAABP3///8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9m
  Al9nAl9oAl9pAl9qAl9rAAAAAAAAAAAAAAAIBwcCAgICAgICAuX4syrxsEFGviaDUUpO8KNfNapL7xPLSAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</PopReceipt>
 <TimeNextVisible>Thu, 13 Nov 2008 21:38:26 GMT</TimeNextVisible>  
 <MessageText>.....</MessageText>  
 </QueueMessage>  
 </QueueMessagesList>

Ниже представлен пример REST-запроса для операции удаления сообщения. В этом случае используется HTTP-команда DELETE. Параметр "popreceipt" определяет сообщение, которое должно быть удалено. "popreceipt" получается в результате предыдущей операции извлечения из очереди, как показано в примере ранее.

DELETE /sally/myqueue/messages/6012a834-f3cf-410f-bddd-dc29ee36de2a?popreceipt=AAEAAAD%2f%2
  f%2f%2f%2fAQAAAAAAAAAMAgAAAFxOZXBob3MuUXVldWUuU2VydmljZS5RdWV1ZU1hbmFnZXIuWEFDLCBWZXJzaW9
  uPTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljSV5VG9rZW49bnVsbAUBAAAAVU1pY3Jvc29mdC5DaXMuU
  2VydmljZXMuTmVwaG9zLlF1ZXVlLlNlcnZpY2UuUXVldWVNYW5hZ2VyLlhBQy5SZWFsUXVldWVNYW5hZ2VyKJlY2V
  pcHQCAAAAFjxNc2dJZD5rX19CYWNraW5nRmllbGQgPFZpc2liaWxpdHlTdGFydD5rX19CYWNraW5nRmllbGQDAAtT
  eXN0ZW0uR3VpZA0CAAAABP3%2f%2f%2f8LU3lzdGVtLkd1aWQLAAAAAl9hAl9iAl9jAl9kAl9lAl9mAl9nAl9oAl9
  pAl9qAl9rAAAAAAAAAAAAAAAIBwcCAgICAgICAjSoEmDP8w9Bvd3cKe423ipfNapL7xPSAsAAAAAAAAAAAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3d&timeout=30
HTTP/1.1
Content-Type: binary/octet-stream 
x-ms-date: Thu, 13 Nov 2008 21:37:56 GMT 
Authorization: SharedKey sally:M/N65zg/5hjEuUS1YGCbVDHfGnI7aCAudkuTHpCDvZY=

Краткие итоги:

  • В данной лекции мы ознакомились с двумя абстракциями данных Windows Azure: Windows Azure Blob – абстракция данных, которая обеспечивает хранилище больших элементов данных.
  • Windows Azure Queue – абстракция данных, которая обеспечивает диспетчеризацию асинхронных заданий.

Ключевые термины:

Windows Azure Blobабстракция данных, которая обеспечивает хранилище больших элементов данных.

Windows Azure Queueабстракция данных, которая обеспечивает диспетчеризацию асинхронных заданий для реализации обмена данными между сервисами

< Лекция 7 || Лекция 8: 12345 || Лекция 9 >
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?