我们有三个Web服务(/ a,/ b,/ c),其中每个服务映射到一个单独的
Java类(ClassA,ClassB,ClassC)中的方法(go()).
只有一个服务应该同时运行(即:/ b在/ a运行时无法运行).但是,由于这是一个REST API,因此无法阻止客户端请求并发运行的服务.
服务器上最好和最简单的方法是什么,以强制服务不同时运行?
更新:这是一个内部应用程序,我们不会有大的负载,只有一个应用程序服务器.
更新:这是一个主观问题,因为您可以对影响最终答案的一般应用程序设计提出不同的论点.当我发现最有趣和最有帮助时,接受了翻译的回答.
解决方法
假设只强制Web服务器只有一个监听线程服务请求是不行的……我想我只是使用一个静态锁(为了清楚起见,可能是
ReentrantLock,尽管你可以在任何共享对象上实现同步):
public class Global { public static final Lock webLock = new ReentrantLock(); } public class ClassA { public void go() { Global.webLock.lock() try { // do A stuff } finally { Global.webLock.unlock() } } } public class ClassB { public void go() { Global.webLock.lock() try { // do B stuff } finally { Global.webLock.unlock() } } } public class ClassC { public void go() { Global.webLock.lock() try { // do C stuff } finally { Global.webLock.unlock() } } }