Лучший способ реализации шаблона разветвления с помощью служебной шины Azure - PullRequest
0 голосов
/ 30 октября 2019

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

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

Так что это фан-аут, затем фан-сбор, чтобы собрать все результаты и продолжить. Например, ради, скажем, у нас есть ZIP-файл, разархивируйте файл и обработайте каждый файл, и как только все будет сделано, мы можем продолжить.

Разветвитель легко. Разархивируйте файл, чтобы n файлов разместили n сообщений в очереди служебной шины и имели несколько служб, обрабатывающих их параллельно. Но теперь, как мы узнаем, что все эти службы завершили свою работу?

Ряд вариантов, которые я рассматриваю:

  1. Помимо отправки сообщения служебной шины для каждого файла, мы также сохраняем файлы в виде сортировки вместе с именемисходного ZIP-файла. Как только работник завершит обработку, он снова удалит этот файл из таблицы и проверит, был ли он последним. Когда это было, мы можем опубликовать сообщение, чтобы указать, что весь ZIP был теперь обработан.
  2. Аналогично 1., но вместо этого у нас есть рабочий ответ, что это сделано, и служба обработки ZIP проверит, осталась ли какая-либо работа. Немного чище, так как теперь ответственность за эту таблицу лежит на службе обработки ZIP.
  3. Пусть служба обработки ZIP активно ожидает всех ответных сообщений в отдельных потоках, но только ввод этой команды уже немного ранит мою голову.
  4. Представьте специальную службу оркестратора, которая принимает n сообщений и заботится о схеме разветвления / разветвления. Для этого также потребуется решение 2, но теперь оно расположено в отдельном сервисе, поэтому у нас нет никакой логики (+ хранилище) в самом сервисе обработки ZIP.

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

Мы, конечно, не первые, кто реализовал такую ​​вещь, поэтому я действительно надеялся, что смогу найти какой-то реальный совет относительно того, что работает и чего следует избегать любой ценой.

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