我有一個相當複雜的應用程序(這是一個命令和控制中心彈簧+基於角度的應用程序,旨在供警察和其他應急中心控制器使用)。按正確順序處理方法/線程
應用程序的主要組件(讓我們稱之爲主幹[spring web app])與不同的應用程序/硬件進行通信。大部分通信都是通過使用RabbitMQ消息完成的(讓我們稱它們爲電報或簡稱爲TM)。
當創建骨幹新線程時收到其中一個TM,並在其中執行一些方法/方法。
問題在於它可能發生骨幹幾乎同時接收兩個或多個TM,並且由於它們在不同線程中執行,可能會發生這樣的情況,即它們未按照到達的順序進行調整,因此出現錯誤的信息呈現給用戶。
通常,我用Redis處理的這類問題。我有一個Redis的鎖,基本上看起來像這樣
distributedRedisLocker.lock(() -> {
executeSomeMethod();
}, howLongIsLockKept, howLongDoWeWaitForItToFinnish);
但在這種情況下,我想避免使用Redis的,沒有任何其他的Java /基於彈簧的解決方案呢?
我不需要它與我擁有的redis鎖一樣,只是我想要的是TMs按照它們到達的順序被處理,並且如果它們中的一個在方法執行中某處失敗,它不會阻止下一個一個永遠。
在像Executors.newSingleThreadExecutor()這樣的單線程執行程序中處理這些TM如何? –
這聽起來很正確,會嘗試一下並更新進度。 – mirzak