Можно ли применить транзакцию как к очереди Azure, так и к таблице Azure?

У меня есть последовательность из четырех шагов, которую я хочу ввести в транзакцию.

1) Получение сообщения из очереди Azure в веб-задании

2) Выполните очень сложную работу, включая запуск GIT в фоновом режиме.

3) Обрабатывает некоторые данные из таблиц Azure, записывая результат в другую таблицу Azure.

4) Отправьте уведомление следующему рабочему процессу через очередь Azure.

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


person The Sharp Ninja    schedule 05.11.2018    source источник


Ответы (1)


Для этого нет поддержки Azure. Также обычно невозможно добиться однократной доставки сообщений очереди.

Вероятно, лучшим решением для вас будет использовать доставку хотя бы один раз (по умолчанию) и сделать обработку сообщений идемпотентной. Это означает, что обработчик сообщений должен определить, было ли сообщение уже обработано. Это можно сделать, проверив таблицы Azure, чтобы увидеть, есть ли уже результаты.

person usr    schedule 05.11.2018
comment
Есть ли в Azure продукт для транзакционных очередей, или мне стоит использовать дешевую виртуальную машину и нам msmq? - person The Sharp Ninja; 06.11.2018
comment
В итоге я изменил свой подход. Вместо того, чтобы помещать какие-либо данные в очереди, я помещаю все данные в таблицы Azure и использую флаги для указания состояния. Тогда сообщения очереди — это просто GUID RowKey каждого события. Если транзакционная часть завершается сбоем, я повторно помещаю в очередь GUID события. Если событие уже обработано, я ничего не делаю (таким образом потребляя событие вне очереди). - person The Sharp Ninja; 06.11.2018
comment
@TheSharpNinja, это отличное решение. - person usr; 06.11.2018