1

我正在尝试从 UI 进行 AJAX 调用。这应该只是启动一个异步过程来根据几个条件更新数据库。好用吗:

  1. Spring AsyncTaskExecutor
  2. 未来任务
  3. 扳机

或者还有其他更好的方法吗?

4

1 回答 1

1

在不知道您的要求的情况下很难说,但是......:

如果您计划扩展我会使用:

  • 如果数据很重要(即您不想删除操作)并且您希望支持其他语言(如 Python),则使用RabbitMQRedis等持久事务队列。
  • Akka,如果您不关心删除操作/消息。

TaskExecutor aka Java ExecutorService 的问题在于它本质上是一个可变的内存 JVM 队列(传递给它的可调用/可运行对象可以具有状态并且可以是可变的)。或者更好的说法是队列中的消息自己运行。

如果您的服务器出现故障并且消息在队列中,则使用 E​​xecutorService 可以对消息说再见。当然,消息不能与其他进程共享。

另一方面,AkkaRabbitMQ而不是 ExecutorService 提供了更好的抽象,并且更容易扩展,因为它本质上是基于“事件”的。消息的行为与数据分离。

在不知道您的数据库的情况下,我只能猜测“触发器”将是一个坏主意。

我认为这是一个重要的问题,因为如果你在所有地方都做错了(将行为和状态结合起来进行异步),那么进行切换可能会非常困难。

于 2012-09-24T01:02:27.957 回答