1

Spring のアプリケーション イベントと threadpoolexecutors を使用して、アクター モデル パターン (プロデューサー コンシューマーと多少マッシュアップ) を実装しようとしています。私の主な目的は、各レイヤーを切り離すことです。私のアーキテクチャは次のとおりです。残りの API を介してビジネス トランザクションの要求を受信する戦争が展開されています。任意の時点で、X は構成可能な数である X 数のトランザクションが存在する可能性があり、実際の実行は非同期である必要があり、各トランザクションは別のスレッドにあります。リクエスト自体は FIFO 方式で処理されますが、一部のリクエストは他のリクエストが処理されるまで待機する必要があるため、多少の複雑さがありますが、それは他のリクエストを処理できないという意味ではありません。

入金(2) 出金(2) 入金(3)

ここで、数字は口座番号です。次の順序で処理したいと思います。

入金(2) 入金(3) 出金(2)

私はこのようにアーキテクチャを構築しました:ヒットを取得してDB(DBに状態を持たなければならない分散システム)に書き込む残りのAPIがあり、アプリケーションコンテキストでclientrequesteventを公開しますプロデューサーイベントの発行と、彼が送信したイベントの数の監視を担当しています(つまり、同時プロセスの数を制限し、上記のロジックを実装することを担当しています)。など)後者によって発行されたイベントをリッスンし、完了したイベントを発行します。

すべてがうまく機能しますすべてが完了し、異なるスレッドとすべてのフローが素晴らしいですが、空きスロットがあるかどうかを判断する中間層に問題があります同期メソッドを持ちたくないし、したくありませんアトミックロングなどのトリックを行いたいのですが、ブロッキングキューを使用してイベントを公開したいのですが、イベントがいつ完了したかを判断する良い方法が見つからないので、新しいイベントを元に戻すことができます。最大の問題は、新しい作業を要求するために、DB にアクセスする必要があることです。これは、このシステムが重い負荷の下で動作する必要があるためです。私はどういうわけかブロッキングキューとスレッドプールを利用したいので、1つのスロットが空いている分、スレッドでサイズが制限されたキューから取得します

これを処理する良い方法は何でしょうか? 前もって感謝します

4

0 に答える 0