【发布时间】:2017-06-21 17:27:31
【问题描述】:
我有一个非常复杂的应用程序(它是一个指挥和控制中心弹簧 + 基于角度的应用程序,旨在供警察和其他紧急中心控制器使用)。
应用程序的主要组件(我们称之为骨干网 [spring web app])是与不同应用程序/硬件的通信。大多数通信是通过使用 RabbitMQ 消息完成的(我们称它们为电报或简称 TM)。
当主干接收到其中一个 TM 时,会创建新线程并在其中执行一些方法/方法。
问题在于,主干可能几乎同时接收两个或多个 TM,并且由于它们在不同的线程中执行,因此可能会发生它们在到达时没有按照相同的顺序进行处理,因此错误的信息是呈现给用户。
通常,我使用 Redis 处理此类问题。我有一个基本上看起来像这样的redis锁
distributedRedisLocker.lock(() -> {
executeSomeMethod();
}, howLongIsLockKept, howLongDoWeWaitForItToFinnish);
但在这种情况下,我想避免使用 redis,还有其他基于 java/spring 的解决方案吗?
我不需要它与我拥有的 redis 锁相同,只是我想要的是 TM 按到达顺序进行处理,如果其中一个在方法执行的某个地方失败,它不会阻止下一个永远。
【问题讨论】:
-
在像
Executors.newSingleThreadExecutor()这样的单线程执行器中处理这些 TM 怎么样? -
这听起来不错,会尝试并更新进度。
标签: java spring multithreading parallel-processing