1

我是 java 新手,正在使用 CXF JAXRS 库构建 java rest 服务。

我希望该服务能够一次使用多个 http 请求。我如何实现这一目标?

我需要将服务托管在 Web 容器中吗?或者,即使我在没有(首选)Web 容器的情况下运行服务,我也可以实现多线程吗?

谢谢

4

1 回答 1

0

您必须修改应用程序的体系结构以一次处理多个请求,同时保存传入的请求以供将来处理。

实施 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 模式)的一个简单示例在这里

于 2013-02-18T13:06:05.660 回答