Гарантирует ли свойство PopReceipt, что CloudQueueMessage был успешно добавлен в очередь хранения Azure? - PullRequest
0 голосов
/ 01 февраля 2019

Я использую библиотеку Microsoft.WindowsAzure.Storage.Queue для отправки сообщений в очередь хранения из функции Azure со следующим кодом:

public void Enqueue(MyMessage myMessage)
{
    string originalPayload = null;
    try
    {
          payload = serializer.Serialize(myMessage);
          var message = new CloudQueueMessage(payload);
          cloudQueue.AddMessage(message);
    }
    catch (Exception ex)
            {
                throw ex;
            }

}

Это работает для небольших томов, но при обработкеоколо 200 сообщений в 5 минут, почти половина сообщений не попадает в очередь, даже если функция никогда не завершается сбоем и отображается как успешная для всех попыток.

Поэтому я хочу добавить шаг проверки после нажатия кнопкисообщение, и я подумал, будет ли работать только проверка PopReceipt:

if ( string.IsNullOrWhitespace(message.PopReceipt) )
{
    // the message was not added, do something
}

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Да, вы можете выполнить проверку проверки, чтобы определить, было ли сообщение успешно добавлено в очередь.

При построении CloudMessage var message = new CloudQueueMessage(payload); все остальные свойства, кроме AsString и AsBytes, будут нулевыми.Таким образом, вы можете использовать такие свойства, как «Id» или «PopReceipt», которые заполняются при успешном добавлении сообщения в очередь для выполнения проверки.

Также убедитесь, что ваша функция Azure запускается 200 раз за 5 минут, какВы упомянули, что если ваша функция не запускается при получении сообщения, проблема связана с функцией Azure.

0 голосов
/ 01 февраля 2019

Функциональность получения квитанций для службы очереди - отличный инструмент для разработчиков, позволяющий легко идентифицировать помещенное в очередь сообщение для дальнейшей обработки.До версии «2016-05-31» всплывающее значение квитанции можно было получить только тогда, когда пользователь получает сообщение из очереди.Чтобы упростить это, теперь выведите значение квитанции, доступное в ответе «Поместить сообщение» (он же «Добавить сообщение»), которое позволяет пользователям обновлять / удалять сообщение без необходимости сначала извлекать сообщение.

Ниже приведен фрагмент кода, которыйиспользуйте эту новую функцию, используя клиентскую библиотеку Azure Storage 8.0 для .NET.

// create initial message
CloudQueueMessage message = new CloudQueueMessage("");


queue.AddMessage(message, null, TimeSpan.FromSeconds(180));
//message.PopReceipt is now populated, and only this client can operate on the message until visibility timeout expires
.
.
.
// update the message (now no need to receive the message first, since we already have a PopReceipt for the message)
message.SetMessageContent("");
queue.UpdateMessage(message, TimeSpan.FromSeconds(180), MessageUpdateFields.Content | MessageUpdateFields.Visibility);

// remove the message using the PopReceipt before any other process sees it
await queue.DeleteMessageAsync(message.Id, message.PopReceipt);

Вот репозиторий github для того же

https://github.com/Azure-Samples/storage-queue-dotnet-pop-receipt/blob/master/dotnet/storage-queue-dotnet-popreceipt/Program.cs

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