我是 java 新手,正在使用 CXF JAXRS 库构建 java rest 服务。
我希望该服务能够一次使用多个 http 请求。我如何实现这一目标?
我需要将服务托管在 Web 容器中吗?或者,即使我在没有(首选)Web 容器的情况下运行服务,我也可以实现多线程吗?
谢谢
我是 java 新手,正在使用 CXF JAXRS 库构建 java rest 服务。
我希望该服务能够一次使用多个 http 请求。我如何实现这一目标?
我需要将服务托管在 Web 容器中吗?或者,即使我在没有(首选)Web 容器的情况下运行服务,我也可以实现多线程吗?
谢谢
您必须修改应用程序的体系结构以一次处理多个请求,同时保存传入的请求以供将来处理。
实施 Master-Worker 模式,这将解决您的问题。您可以按照以下步骤来实现此模式(它是一种方法而不是算法):
1) 根据您的意愿使用 Java 5 的 Executor Framework 或 Java 7 的 Fork Join。假设我们使用的是 java 5。
2)使用共享队列临时保存数据(比如一些工作对象)以备将来使用。我使用了线程安全的 BlockingQueue。
3)创建一个主类,它将启动和停止工人的多个实例(n)。当收到新的请求时,master 会将数据放入工作对象中,并将该工作对象添加到队列中。在将工作对象添加到队列时,master 会在这个队列上调用 notifyAll 方法(唤醒所有等待的工作人员)。
4)创建一个工作线程类,它将监听这个队列(通过在其构造函数中引用共享队列)。从队列中一一获取工作对象,直到队列为空。当队列为空时,将工作人员置于等待状态。当 Master 将在此队列上调用 notifyAll 方法时,它将再次上线。
如果您需要任何其他说明,请告诉我。
Executor Framework(非 Master Worker 模式)的一个简单示例在这里