Мне нужно создать довольно много отчетов, и на создание отчета может уйти около 5 минут, большой объем данных, много разных источников.
Клиент отправляет сообщения в очередь хранилища Azure. Есть рабочие роли, которые обрабатывают сообщения и создают отчеты.
Если я хочу масштабировать это, скажем, у меня есть 10 рабочих ролей, которые будут обрабатывать сообщения из очереди и генерировать отчеты. Затем я буду добавлять сообщения в очередь следующим образом:
- сообщение 1: обработать отчеты с 1 по 5
- сообщение 2: отчеты о процессе с 6 по 11 ........
- сообщение 10: обрабатывайте отчеты от 50 до 55 (диапазон может быть неточным)
Если моя рабочая роль 1 примет первое сообщение и заблокирует его, но процесс займет 5 минут, срок действия блокировки истечет, и сообщение снова станет видимым в очереди, поэтому рабочая роль 2 примет его и начнет его обрабатывать. ... и так далее
Как я могу избежать того, что сообщение очереди будет использовано только один раз, имея в виду, что задача долгая?