Этот вопрос немного следует из это — мне нужно разработать приложение для отправки документов на базе Azure со следующими требованиями:
- Пользователь может настроить несколько конечных точек разных типов через веб-интерфейс (http, файл, электронная почта), который будет отправлять документы на соответствующие типы конечных точек (например, для http — конечную точку webapi, для файла — просто скопировать его в папку). Каждой конечной точке будет присвоено имя.
- Каждая конечная точка должна действовать как очередь — сообщения (документы), отправленные в эту конечную точку, должны обрабатываться по порядку. Сообщения должны обрабатываться по одному.
- Сообщение, которое «зависло» для одной конечной точки (т. е. из-за того, что конечная точка http, на которую оно отправляется, не работает), не должно блокировать обработку сообщений на других конечных точках.
- Конечные точки можно удалить.
- Сведения о конечной точке хранятся в базе данных SQL.
Естественно, использование очереди служебной шины Azure облегчило бы это, и у меня есть код, который создает тему и подписку через SB REST Api. Проблема возникает из-за динамического характера конечных точек: каждая конечная точка может быть представлена как тема, но как я могу иметь обработчик для каждой темы, которая создается динамически с именем, указанным пользователем? В частности, я не могу создать триггер функции для темы служебной шины, потому что это зависит от того, какое имя темы указано заранее. Я подумал о приложении логики, которое содержит обработчик триггеров для каждой темы (и которое вызывает функцию Azure), но для этого также требуется знание имени темы. Альтернативой может быть только одна тема и несколько фильтров, но будет ли это соответствовать требованиям, изложенным выше, и кажется не таким приятным, как наличие нескольких тем (не говоря уже о том, что даже с запросами фильтров они по существу основаны на фиксированных значениях?). Так какой дизайн будет соответствовать этим требованиям?