2011-10-26 2 views
0

私はWeb開発者がいくつかのJ2EE開発(初心者)に遭遇しました。私は真剣にこの理論を確認する必要があります。配信を保証するためのJMS p2pフェイルオーバーパターン

ユーザーが保存ボタンを押すと、私たちのシステム(プロデューサ)からSOAエンタープライズサービスバス(コンシューマ)にメッセージを配信する特権が与えられました。情報を紛失したり、納品したりすることができず、納品順序を守らなければなりません。

環境:

  • のJBoss EAPプロデューサーとして5.1。
  • JNDIサーバーはESB(おそらく標準)です。
  • 消費者としてJboss ESB。

私の武器は非同期性のためJMS、p2pです。

生産者は、いくつかの問題が発生する可能性がメッセージを送信することが当接している:ESBダウンJNDI例外の原因となっている

  • キューマネージャが覚醒または誤って構成されていない何らかの理由です。これにより、JMS例外が発生するはずです。
  • ネットワークヒックアップ。これによりJMSエラーが発生します。

だから、フェールオーバーパターンを探しています。

  1. メッセージが最初に追加される内部JMSキューを追加します。
  2. 内部キューをリッスンし、それをターゲットキュー(ESB)に送信しようとするMDBを追加します。
  3. 何らかの方法で失敗した場合は、致命的なログを記録し、サポート担当者に電子メールを送信してください。

これは、メッセージがMDBによって処理されるまで内部のキューに残る信頼できるパターンを生成するはずです。

アドバイスをしてください。

まあ

よろしく

DS

+0

非同期で配信順序を維持するのは難しいと思います。順序を保証してください、まったく逆です... – Thufir

答えて

1

「一時的」キューが完全に悪いアイデアではありませんが、他にそれを置く1つのキューからデータを移動するまでの時間の間、あなたは電位窓を持っていますリスクのそのウィンドウは何も近くにはありませんが、そこに何らかの失敗があったらどうなりますか?あなたはキューにメッセージを戻す必要があります(そして、正しい順序でそれを取得することで問題になるでしょう - 厄介なものです!)、またはあなたが別のキューを置くまで何らかの方法でそれを保持してください より安定したソリューションは、キューオーダー列を持つデータベースにデータを格納することです。データを正しい順序で選択することができますが、新しいキューに送信し、最後に「完了」か何か、またはそれより良い(?)とフラグを立ててdb内のデータを削除します。

+0

キューオーダー列データが正しいことはあなたの保証は何ですか?これは、受け取った最初のメッセージが最初に処理されるという保証はないということです。メッセージが受信されると、それはFIFOではないので、2番目のメッセージは最初のメッセージとしてdbに入れられます。少なくともこれは私の理解です。 – Thufir

関連する問題