Доступ к определенному узлу в локальном кластере сервисной фабрики
Я работаю над приложением Service Fabric, в котором я запускаю свое приложение, которое содержит несколько основных веб-API ASP.NET. Теперь, когда я запускаю свое приложение в своем локальном кластере сервисной фабрики, который настроен на 5 узлов, приложение работает успешно, и я могу отправлять запросы по почте в открытые веб-API. На самом деле я хочу поразить код, работающий на одном и том же узле кластера, с разными запросами на публикацию к различным открытым API на этом конкретном узле.
Для дальнейшего объяснения, например, есть API, представленный на узле "0", который принимает запрос на публикацию и выполняет задание из exe-службы, работающей на узле "0", а также есть API, который прерывает запущенное задание. Теперь, когда я запрашиваю выполнение задания, оно начинает выполняться на узле "0", но когда я пытаюсь прервать задание, кластер сервисной фабрики перенаправляет запрос на другой узел, например, скажем, на узел "1". В результате я не смог прервать работающее задание, потому что на узле '1' нет доступного запущенного задания. Я не знаю, как справиться с этой ситуацией.
Для этой ситуации существуют решения, такие как поддержание хранилища, в котором будет храниться некоторый уникальный идентификатор перед началом обработки задания и возврата идентификатора вызывающей стороне. Теперь, когда кто-то хочет прервать работу, он / она вызывает API, отправляющий идентификатор, чтобы быть прерванным, но и здесь проблема заключается в том, что внутри моих запущенных служб запущено несколько потоков. Я хочу прервать эти запущенные темы. Эти потоки находятся только на том конкретном узле, на котором выполняется задание. так или иначе я должен добраться до этого конкретного узла.
Для состояний я использую службу Statefull типа ASP.Net Core Web API и запускаю приложение на 5 узлах моего локального кластера сервисной фабрики.
Пожалуйста, предложите, какой подход должен быть наилучшим.
1 ответ
Как указал Патрик, я ответил на похожий вопрос: отправка запроса в asp-net-core-web-api-run-on-a-конкретный-узел-в-службе
У вас проблемы, потому что вы спроектировали свою систему. Вы не должны полагаться на узел, выполняющий задачу, а на саму задачу, поскольку она может быть деактивирована или перемещена, а также ее трудно масштабировать, если вы держите оба в одном узле.
Есть много подходов для решения этой проблемы, в вопросе, на который я ссылался, есть несколько, с которых можно начать.