Доступ к определенному узлу в локальном кластере сервисной фабрики

Я работаю над приложением Service Fabric, в котором я запускаю свое приложение, содержащее набор основных веб-API ASP.NET. Теперь, когда я запускаю свое приложение в своем локальном кластере сервисной фабрики, который настроен с 5 узлами, приложение работает успешно, и я могу отправлять почтовые запросы к открытым веб-API. На самом деле я хочу запустить код, работающий на одном узле кластера, с разными почтовыми запросами к разным открытым API на этом конкретном узле.

Для дальнейшего объяснения, например, на узле «0» есть API, который принимает почтовый запрос и выполняет задание из службы exe, работающей на узле «0», а также есть API, который прерывает текущее задание. Теперь, когда я запрашиваю выполнение задания, оно начинает выполняться на узле «0», но когда я пытаюсь прервать задание, кластер сервисной фабрики перенаправляет запрос на другой узел, например, узел «1». В результате я не смог прервать запущенное задание, потому что на узле «1» нет запущенного задания. Я не знаю, как справиться с этой ситуацией.

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

Для состояний я использую службу Statefull типа ASP.Net Core Web API и запускаю приложение на 5 узлах моего локального кластера фабрики служб.

Пожалуйста, предложите, что должно быть лучшим подходом.


person starklord    schedule 12.03.2018    source источник


Ответы (1)


Как указал Патрик, я ответил на аналогичный вопрос здесь: отправка-запроса-к-asp-net-core-web-api-работающему-на-конкретном-узле-в-службе

У вас проблемы из-за того, как вы спроектировали свою систему. Вы должны полагаться не на узел, на котором выполняется задача, а на саму задачу, потому что она может быть деактивирована или перемещена, а также ее трудно масштабировать, если вы держите оба узла в одном узле.

Есть много подходов к решению этой проблемы, в вопросе, на который я ссылался, есть несколько, с которых вы можете начать.

person Diego Mendes    schedule 12.03.2018