我们的WebSphere应用服务器上有一个应用程序,它调用部署在同一应用服务器上的第二个应用程序的web服务。
有100个可用的web容器(线程)。
当有很多活动用户时,应用程序1分配所有可用的web容器线程。当应用程序1试图调用web服务(应用程序2)时,没有空闲的线程,因此应用程序1永远不会完成,因此整个系统挂起。
我该如何解决这个问题?例如,是否有可能限制每个应用程序的web容器线程数?例如,我只允许应用程序1使用50%的可用线程。
一个解决方案是在应用程序1中添加一些代码来监视同时处理的请求计数。但如果可能的话,我会尽量避免,因为我认为这很容易出错。前面,我们使用了synchronized
关键字。但这一次只允许一个请求,这会导致更大的问题。
可以通过定义单独的传输链和线程池来实现。
我之前没有web控制台,所以步骤大致顺序:
- 为你的soap服务创建单独的线程池
- 在新端口上创建单独的web传输链,例如9045
- 将线程池与传输链关联
- 创建新的虚拟主机,主机别名*:9045
- soap服务应用映射到该端口
如果您将通过9045端口访问应用程序将使用自己的单独的线程池。
问题:
- 如果它只是本地访问(从一个应用程序到另一个应用程序),那么你只需通过localhost:9045访问它,你就可以了
- 如果你的soap服务也需要从外部访问,例如通过默认https端口(443)的插件,你需要为它创建不同的DNS主机名,这样它就可以与你的soap服务应用程序相关联。Soap-service.domain.com(然后在主机别名中使用该域而不是*)。在这种情况下,插件也应该使用9045端口进行传输,但我手头没有环境来验证。
我希望我没有把它弄得太复杂。: -)