我正在开发一个Service Fabric应用程序,我正在运行包含一堆ASP.NET Core Web API的Application。现在,当我在配置有5个节点的本地服务结构集群上运行应用程序时,应用程序成功运行,并且我能够发布公开Web API的发布请求。实际上,我想在同一个集群节点上运行代码,对该特定节点上的不同公开API发出不同的发布请求。
为了进一步说明,例如在Node' 0'上公开了一个API。接受post请求并从Node' 0'上运行的exe服务执行Job,并且还有一个中止正在运行的作业的API。现在当我请求执行一个Job时,它开始在Node' 0'上执行。但是当我尝试中止作业时,服务结构群集将请求转发到另一个节点,例如节点' 1'。结果我无法中止正在运行的Job,因为Node' 1'上没有正在运行的Job。我不知道如何处理这种情况。
对于这种情况,有一些解决方案,例如在开始处理作业之前维护一个存储器,该存储器将保留一些唯一ID,并将ID返回给调用者。现在当一个人想要中止Job时,他/她会调用api发送id被中止但是这里的问题再次出现在我正在运行的服务中,有多个线程正在运行。我想中止那些正在运行的线程。这些线程仅在运行作业的特定节点上找到。所以我不得不到达那个特定的节点。
对于州,我使用ASP.Net Core Web API类型的Statefull服务,并在我的本地服务结构集群的5个节点上运行应用程序。
请建议什么是最好的方法。
答案 0 :(得分:1)
帕特里克指出,我在这里回答了类似的问题: sending-request-to-asp-net-core-web-api-running-on-a-specific-node-in-a-service
由于您的系统设计方式,您遇到了问题。 您不应该依赖于运行任务的节点,而是依赖于任务本身,因为它可能会被停用或移动,如果您将它们保留在同一节点中,也很难扩展。
有很多方法可以解决这个问题,在我引用的问题中,有一些方法可以解决。