在Liferay模型侦听器中异步制作代码(使用并发)



问题

我们的Liferay系统是将数据与其他网络应用程序同步的基础。
我们为此目的使用Model Listeners
通过侦听器有很多Web服务调用和数据库更新,因此liferay中的特定操作太慢了。

例如:在liferay中添加User时,我们需要触发大量的Web服务调用来添加用户详细信息,并使用用户数据以及一些Liferay自定义表更新其他系统。因此,添加用户需要花费大量时间,在极少数情况下,请求可能会超时!
由于UserListener中的代码仅取决于用户详细信息,即使UserListener中存在任何异常,用户仍将添加到Liferay中,因此我们考虑了以下解决方案。

我们在liferay中还有一个调度器,如果在监听器中执行代码时出现一些异常,它会修复问题。

建议的解决方案

我们想过使用并发 API 使代码异步UserListener

所以这是我的问题:

  1. 是否建议在模型侦听器中使用并发代码?
  2. 如果是,那么如果我们也通过此代码更新Liferay自定义表,例如交易或其他内容,会产生任何不利影响吗?
  3. 这种方法的其他一般优点和缺点是什么?
  4. 有没有其他更好的方法可以在不影响用户体验的情况下实时更新到其他系统?

感谢您对此事的任何帮助

您希望使用并发来解决此问题是有道理的。

在修改模型的线程中执行诸如调用Web服务等之类的密集型工作并不是一个好主意,除了它对用户体验的影响之外。

在模型的侦听器中触发线程可能有些复杂且难以维护。

您可以探索使用Liferay的消息总线范式,您可以在其中将消息发送到断开连接的消息接收器,然后该接收器将在模型侦听器的调用线程之外执行所有密集的工作。

在此处阅读有关消息总线的更多信息:

  1. 消息总线开发指南
  2. 消息总线维基

最新更新