私は1つのエンドポイントを公開春ブートアプリケーションがあります。それは1つのクエリのparamを受け取ることができます複数の呼び出しをクラスタ内のノードを介して同じリソースに同期させるにはどうすればよいですか?
/update/1532
は、値として「偽」または「真」のいずれかを持つことができる「承認」。例えば :
/update/1532?approve=false
問題は更新エンドポイントが異なるクエリPARAM値と同時に呼び出すことができるということです。
このケースを処理するために、進行中のIDのSetを保持するシングルトンContextクラスを作成しました。上記の場合、最初の呼び出し後に1532のIDを保持する必要があります。そのため、同じIDを持つ2番目の要求は、「IDはすでに進行中です」というエラー応答を引き起こします。
このソリューションは、それぞれが同じデータベースに複数のノードを作成するまでにうまく機能しました。 問題は、各ノードに固有のIdのセットを持つ別のコンテキストが含まれることです。
解決策の1つは、Set on Contextクラスを置き換えることができるIdの分散キャッシュを作成することです。 しかし、私はこのアプローチが良いとは確信していません。
誰かが内部クラスタをロックするためのより良い解決策を提案できますか?
P.S. すべてのDB通信がActivitiフレームワークの枠内に隠れているため、DBトランザクションを使用して同期を実装することはできません。
テクニカルインフォメーション: Spring-boot-1.5.6; Activiti- 5.21