java - 在 Java 中触发异步进程

标签 java mysql asynchronous triggers daemon

我有一个 Web 应用程序,它接收用户请求并将它们放入 MYSQL 数据库中。现在,典型的用户请求需要按照需要花费大量时间才能完成的工作流来处理。为了解决这个问题,我有一个异步处理器,它一直在监听 MYSQL 表。

我注意到,在无限循环中轮询 MYSQL 表会导致我的应用程序部署到的机器上的 CPU 使用率激增,这通常会导致机器无法使用。

我知道当 MYSQL 数据库中没有任何 Activity 请求时让异步进程 hibernate “一段时间”是一种选择,但我想将其作为最后的手段。

使这个过程同步不是一种选择,因为服务单个请求所涉及的工作流需要时间,而且还因为需要将处理与前端分离以允许后端发展。

我想知道是否有任何聪明的方法来触发异步进程,这样我就可以避免 CPU 使用率峰值,同时仍然从异步处理器获得最佳响应时间。

如有任何建议,我们将不胜感激。

谢谢 p1ng

最佳答案

一个选项是将请求存储在数据库中并在您的系统中发送某种事件(例如 JMS 消息,或通过使用 java.util.concurrent 构造)。然后读取和执行命令的进程可以被这个信号唤醒,去数据库中取数据并照常处理。

这样,您就不会浪费 CPU 周期来轮询尚不可用的数据,并且由于没有轮询延迟,您会更加 react 灵敏。

关于java - 在 Java 中触发异步进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8606597/

相关文章:

php - 如何合并两个具有相同列名称的画廊

c# - 异步 TCP 服务器(Windows 服务)中的内存泄漏

javascript - javascript 中的 await 关键字会降低应用程序的速度吗?

java - Hibernate - 将列存储为加密,并仅在运行时解密

java - 如何使用 Java 解析 .xsd 文件

java - 不使用 native 代码跟踪 java 堆

java - 如何通过双击表格行从一个选项卡移动到另一个选项卡

mysql - 如何将 RDS Aurora Mysql 数据库复制到仅包含某些行的 RDS 的其他实例

javascript - (Angular2) JSON数据(http.get())未定义,数据未在组件中更新

java - 为什么gradle会出错?