Что хорошего в атрибуте QueueTrigger, когда вы не можете удалить из очереди точное сообщение в очереди? Или ты можешь? - PullRequest
0 голосов
/ 04 сентября 2018

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

Чем это полезно?

По-прежнему нет способа снять в очередь именно этот элемент хранилища очереди в этой запущенной функции, верно? Лучшее, что вы можете сделать, - это просто вытолкнуть любой следующий доступный элемент из очереди, который может быть не тем, который вызвал функцию.

Я полагаю, что в теории 1 одно нажатие в хранилище очереди вызовет 1 единственный вызов функции, при котором вы можете сделать 1 один вызов. Таким образом, в конце дня вы все еще можете использовать эти триггеры для обработки всех элементов в очереди - при условии, что нет прерываний или чего-либо, что могло бы привести к тому, что триггер останется необработанным, что приведет к застреванию элементов в очереди.

Я что-то здесь упускаю? Я смотрю на хранилище очередей в сочетании с функциями Azure и QueueTrigger . Я пытаюсь осмыслить управляемый очередью рабочий процесс, который выполняет функции, но мне кажется, что это кажется неправильным - или я чего-то здесь не понимаю.

1 Ответ

0 голосов
/ 04 сентября 2018

Кажется, вы понимаете что-то не так, но я не совсем уверен, в чем ваша путаница.

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

Ваш код не должен и не должен явно «выталкивать» что-либо из очереди - это делается за кулисами во время выполнения функций Azure. Один вызов обработает только это единственное сообщение и завершится как можно скорее.

Посмотрите на этот код:

[FunctionName("QueueTrigger")]
public static void QueueTrigger(
    [QueueTrigger("myqueue-items")] string myQueueItem, 
    TraceWriter log)
{
    log.Info($"C# function processed: {myQueueItem}");
}

Помимо атрибутов, ни один код не работает с очередью. Он срабатывает один раз за сообщение.

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