我在职业生涯中遇到过几次的问题是在分层服务架构中,如果单个下游系统进入其所有线程都被死锁或某种无限循环消耗的状态,它可能会导致整个客户端应用程序瘫痪该系统中的错误。在这些情况下,Java EE 服务器上的服务器套接字仍在接受来自客户端应用程序的请求并对其进行排队。这会导致客户端应用程序用尽所有等待来自正确建立的套接字连接的响应的线程。然后所有用户都被锁定在系统之外,因为他们的请求也在排队。
我已经想到了一些解决方案,但我想知道社区是否有更好的解决方案。
下游请求的隔离线程池。这成为一个问题,因为您在系统中增加了空闲线程的数量,创建了许多需要足够线程来确保完全吞吐量的小池。产生线程意味着您需要自己处理事务和安全上下文。不是真正受支持的 Java EE 解决方案。
MDB 解决方案,Java EE 的首选异步解决方案,然而,这似乎相当重量级,但具有让应用程序服务器处理管理 MDB 线程池的额外好处。(目前在我的名单上排名第一)
ESB。这甚至更重,并增加了更多的网络和处理时间。但它允许您设置单独的服务超时。还有一个问题是在大公司中实施需要很长时间,所以在我的时间范围内可能不切实际。
大家有什么更好的想法吗?