gpt4 book ai didi

liferay - 在 Liferay 模型监听器中使代码异步(使用并发)

转载 作者:行者123 更新时间:2023-12-02 02:01:26 25 4
gpt4 key购买 nike

问题

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

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

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

建议的解决方案

我们考虑过使用 Concurrency API 使 UserListener 中的代码异步。

所以这是我的问题:

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

感谢您对此事的任何帮助

最佳答案

您想使用并发来解决这个问题是有道理的。

除了会对用户体验产生影响之外,在修改模型的线程中进行大量工作(如调用 Web 服务等)并不是一个好主意。

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

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

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

  1. Message Bus Developer Guide
  2. Message Bus Wiki

关于liferay - 在 Liferay 模型监听器中使代码异步(使用并发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com