0

ebXML メッセージ パッシング アプリケーション用のメッセージ ハンドラを作成しています。メッセージは Request-Response パターンに従います。プロセスは簡単です。送信者がメッセージを送信し、受信者がメッセージを受信して​​応答を返します。ここまでは順調ですね。

メッセージを受信すると、受信者はメッセージに対する応答時間 (TTR) を設定します。これは、数秒から数時間/日までの範囲です。

私の質問は次のとおりです。送信者は TTR にどのように対処する必要がありますか? TTR が非常に長くなる可能性があるため (数日)、これを非同期プロセスにする必要があります。どうにかしてタイマーをカウントダウンできますが、システムリソースを長時間拘束することはできません。大量のメッセージが存在する可能性があります。

私の最初のアイデアは、TTR の有効期限と共に、メッセージ ID が追加される「待機中」のコレクションを持つことです。その後、定期的にコレクションをポーリングします。タイマーが切れると、メッセージ Id は「期限切れ」コレクションに移動され、メッセージ トランザクションは終了します。

Sender が応答を受信すると、一致する送信済みメッセージの "Waiting" コレクションをチェックし、応答が時間内に受信されたことを確認できます。メッセージは、次の処理段階のためにコレクションから削除されます。

これは堅牢なソリューションのように聞こえますか。これは解決済みの問題だと確信していますが、このタイプのアルゴリズムに関する貴重な情報はほとんどありません。C#で実装する予定ですが、現段階では実装言語は関係ないと思います。

ご意見ありがとうございます

4

1 に答える 1

1

クライアントの数に応じて、永続的な JMS キューを使用できます。クライアント ID ごとに 1 つのキュー。クライアントがメッセージを取得するために接続するまで、メッセージはキューに残ります。

TTR の目的がわかりません。応答が特定の時間内に返されない場合は、わざわざ送信しないことを意味するのは、クライアント側の対策ですか? それとも、サーバー上で作業をスケジュールし、今必要なことを実行し、後で実行する応答時間を遅らせてリクエストをプッシュするために使用されますか?

それは広い質問です...

于 2010-12-06T22:19:49.600 に答える