私はキューに入れられたメッセージングシステムのセッションコンテキストデータを実装しようとしています。非同期(キューに登録された)メッセージと関連付けられたセッションデータ
セッションの処理は次のようになります。 フロントエンドアプリケーションは自身を認証し、セッションIDを受け取ります。 その後、セッションIDがメッセージヘッダに含まれるので、メッセージハンドラには、例えば、セキュリティチェック、監査ロギング。クライアントがクラッシュして作業を続けると、クライアントがセッションを取得することがあります。
ここで、キーと値のペアをセッションIDに関連付ける必要があります。しかし、これは、メッセージ・ハンドラーが使用するセッション・データがメッセージの送信時に使用されていなければならないため、セッション・データが変更された場合に多くの並行性の問題を引き起こします。
Iは、2つの可能な解決策を参照:
- を
- すべてのメッセージヘッダに関連付けられたセッションデータを入れて保存セッションデータがデータベースにバージョンとメッセージヘッダにバージョン番号を使用します。
最初のメッセージはメッセージを大きくし、2番目のメッセージはセッションDBを大きくし、多くのインフラストラクチャコードを作成します。私は両方のDBに最新の値を保存しなければならないので、クラッシュまたは接続が失われた場合でもクライアントは作業を続けることができます。
他に解決策はありますか?私は最初の解決策を使う傾向がありますが、最初にいくつかのフィードバックを得たいと思います。
(JMS/NServiceBus/Masstransitなど)他の人がこれをどのように処理しますか?回答に基づいて
更新:のみフロントエンドでセッションデータを使用するために私のチームメンバーを説得し、それがメッセージハンドラのために必要とされる場合、メッセージにそれを置くのルートを取るために選ばれた I've。
あなたはメッセージスキーマを使用しています。セッションデータはフロントエンドにとどまり、リカバリのためにのみ保存されます。関連ビジネスデータをヘッダーや外部セッションデータベースに入れるのは間違いです。 – sanosdole