У меня есть следующая теоретическая проблема.
Я хотел бы иметь возможность создавать несколько экземпляров каждой роли в моем приложении Azure.Как минимум 2, чтобы убедиться, что он работает 24/7 (или почти 24/7).
Это легко для клиентских клиентских приложений и ролей, которые прослушивают данные.
Это также легкодля рабочих ролей, которые обрабатывают данные и сохраняют результаты в BLOB-объектах / хранилищах таблиц, при условии, что каждая рабочая роль обрабатывает свой собственный набор данных для создания единого результата.
Но у меня проблема с «серединой»это приложение.
В простейшем случае, если бы я мог создать «отдельную» очередь хранилища Azure (нет двух идентичных сообщений), это было бы легко.Но, насколько я знаю, это невозможно сделать, тем более что вы можете загружать только 32 сообщения одновременно.
Итак, мне нужна какая-то роль диспетчера ... Я думаю.Эта роль гарантирует, что рабочие роли не будут мешать друг другу.
НО, это означает, что роль контроллера не может иметь более одного экземпляра!
Как мне решить эту проблему?
РЕДАКТИРОВАТЬ:
Я вижу, что, возможно, дал слишком мало информации о моей проблеме.
Я знаю, как работают очереди Azure;Я знаю, что после удаления сообщения оно не будет доступно для других ролей в течение определенного периода времени или до тех пор, пока оно не будет удалено.
Дело в том, что я не могу просто заполнить очередь случайными уникальными данными,как GUID.
Вот более простое объяснение проблемы.
- Роли слушателя прослушивают данные клиента и помещают эти данные в базовую таблицу, затем уведомляют,через очередь, что определенная часть этой таблицы была изменена.
- Роли слушателя могут сообщать, что одна и та же часть таблицы изменялась несколько раз - они не отслеживают, что происходит с очередью,и что в нем уже есть, поэтому они просто отправляют сообщения в духе «эй, я изменил этот бит для этого клиента» (например).
- Рабочие создают или обновляют определенные файлы (в основном, BLOB-объектов) на основесообщения, предоставленные слушателями.В настоящее время существует один рабочий, который загружает всю очередь, проверяет наличие отдельных сообщений, а затем обновляет все файлы по мере необходимости.Добавление второго работника вызывает проблемы: поскольку очередь обычно НЕ содержит разных значений, два работника могут начать работать с одним и тем же выходным файлом и прерывать друг друга.
Таким образом, я ищуОчередь, которая отличается или, по крайней мере, предоставляет способ проверить, не было ли в нее уже помещено конкретное сообщение.
Если служебная шина - единственный путь, то пусть будет так, нобыло бы неплохо сделать решение максимально простым.;)