我有一个相当复杂的应用程序(这是一个命令和控制中心弹簧+基于角度的应用程序,旨在供警察和其他应急中心控制器使用)。按正确顺序处理方法/线程
应用程序的主要组件(让我们称之为主干[spring web app])与不同的应用程序/硬件进行通信。大部分通信都是通过使用RabbitMQ消息完成的(让我们称它们为电报或简称为TM)。
当创建骨干新线程时收到其中一个TM,并在其中执行一些方法/方法。
问题在于它可能发生骨干几乎同时接收两个或多个TM,并且由于它们在不同线程中执行,可能会发生这样的情况,即它们未按照到达的顺序进行调整,因此出现错误的信息呈现给用户。
通常,我用Redis处理的这类问题。我有一个Redis的锁,基本上看起来像这样
distributedRedisLocker.lock(() -> {
executeSomeMethod();
}, howLongIsLockKept, howLongDoWeWaitForItToFinnish);
但在这种情况下,我想避免使用Redis的,没有任何其他的Java /基于弹簧的解决方案呢?
我不需要它与我拥有的redis锁一样,只是我想要的是TMs按照它们到达的顺序被处理,并且如果它们中的一个在方法执行中某处失败,它不会阻止下一个一个永远。
在像Executors.newSingleThreadExecutor()这样的单线程执行程序中处理这些TM如何? –
这听起来很正确,会尝试一下并更新进度。 – mirzak