我在职业生涯中遇到过的一个问题是在分层服务体系结构中,如果单个下游系统进入所有应用程序都陷入死锁或某种无限循环消耗状态,则单个下游系统可能会关闭整个客户端应用程序该系统中的错误。在这种情况下,Java EE服务器上的服务器套接字仍在接受和排队来自客户端应用程序的请求。这将导致客户端应用程序用尽所有线程,以等待来自正确建立的套接字连接的响应。然后,所有用户都被锁定在系统之外,因为他们的请求也正在排队。
我想到了一些解决方案,但我想知道社区中是否有更好的解决方案。
你们有更好的主意吗?
最佳答案
您是正确的,因为MDB情况是正常的解决方案,并且它通常还支持超时,这将有助于避免挂起请求。话虽如此,它可能并不能真正解决问题,而只是将备份转移到您的JMS队列中,而没有将响应发送回客户端。当然,如果几个服务中只有一个导致此问题,则其他服务现在仍然可以访问。
您的建议(1)也可以通过commonj WorkManager在WebSphere或Weblogic上执行。它将允许您在这些环境中创建托管线程,并且它是轻量级的。
WorkManager and TimerManager API