私は非常に複雑なアプリケーションを持っています(警察や他の緊急センターコントローラが使用するコマンド/コントロールセンターのスプリング+角度ベースのアプリケーションです)。正しい方法での処理方法/スレッド
アプリケーションの主要コンポーネント(バックボーンと呼ばれる[spring web app])は、さまざまなアプリケーション/ハードウェアとの通信です。その通信の大部分は、RabbitMQメッセージ(テレグラムまたは短いTMで呼ぶことができます)を使用して行われます。
TMの1つがバックボーンによって受信されると、新しいスレッドが作成され、いくつかのメソッド/メソッドが実行されます。
問題は、バックボーンがほぼ同時に2つ以上のTMを受信し、異なるスレッドで実行されるため、到着した順序と同じ順序でフィニッシュされていない可能性があるユーザに提示される。
通常、このような問題は私がRedisで処理します。私は基本的にこの
distributedRedisLocker.lock(() -> {
executeSomeMethod();
}, howLongIsLockKept, howLongDoWeWaitForItToFinnish);
のように見えますが、この場合には、私はRedisのを使用して避けたいRedisのロックを持っている、これに他のJava /春ベースのソリューションはありますか?
私はそれが私が持っているredisロックと同じである必要はありません、私が望むのは、それらが到着する順序でTMが処理され、それらのいずれかがメソッドの実行のどこかで失敗した場合、永遠に1つ。
これらのTMを 'Executors.newSingleThreadExecutor()'のようなシングルスレッドエグゼキュータで処理する方法はありますか? –
これは正しいことのように聞こえ、試して進捗状況を更新します。 – mirzak