JMSメッセージを確実に宛先に送信できますか?確実には、例えばMessageProducer.send()
何らかの理由でコールに失敗すると、自動的に再試行されます。私はトランザクションセッションが最後の手段として.recover()
を使用するかもしれませんが、再試行はどうですか?例えば。私は、セッションが確立され、メッセージを送信しようとする間に断続的なネットワーク障害が発生しました。この場合、recover()
はどのように役立ちますか?JMSメッセージを確実に送信するにはどうすればよいですか? (MessageProducer.send()エラーをフェイルオーバー)
答えて
私が知る限り、JMSはこのような動作をサポートしていません。あなたは特定のベンダーエクステンションを検索することができますが、IMHOでは、あなたのニーズに適したものを見つけることはほとんどありません。
がそれを実装します。
は、私はあなたの問題の2つだけのソリューションを参照してください。トランザクションを無効にするには、JMSセッションを手動で管理し、例外をキャッチし、必要に応じてトランザクションマネージャの「ロールバックのみ設定」機能を使用します。
ローカルキューを使用してメッセージを格納し、バックグラウンドサービスを使用してそれらをターゲットリモートキューに移動します。多くのキューマネージャがこれをサポートしていることに注意してください。 Store and forward Queues of ActiveMQ。明らかに、この方法では、トランザクション境界にはリモートキューは含まれません。
私は2番目の解決策はあなたの問題に対する完全な答えではないことを知っていますが、何回も十分です。
JMSは、探している動作を指定していません。 JMSは、実際には、JMSブローカの観点からは一度だけ配信されているため、同じメッセージを2回取得して「機能的に重複した」メッセージと呼びます。
これはJMSの一部ではないため、答えはさまざまなベンダーの実装にあります。たとえば、WebSphere MQにはv7.0.1以降の「マルチインスタンス・キュー・マネージャー」という機能があります。 v7.0.1クライアントアプリケーションは自動的に接続を再試行し、障害の発生時にプライマリノードからセカンダリノードへQMgrを追跡します。これが発生している間にアプリケーションはブロックされ、フェールオーバーは認識されません。
しかし、このような動作をしても、アプリはまだ失敗のコードを作成する必要があります。たとえば、WMQの自動再接続(または任意のプロバイダの再接続)を使用している場合、ユーザが不定期にハングしないように、接続の復旧を待つ時間を調整する必要があるかもしれません。呼び出しがブロック解除されると、トランザクションはロールバックされ、コード内で再試行が行われなければなりません。これは、トランザクションがもはや有効ではない接続に関連付けられているため、適切です。
- 1. Delphiでメッセージが送信された場所を確認するにはどうすればよいですか?
- 2. fastcgiアプリにメッセージを送信/送信するにはどうすればよいですか?
- 3. ウィンドウに送信されるメッセージを傍受するにはどうすればよいですか?
- 4. 別のシステムからSameTimeユーザーにメッセージを送信するにはどうすればよいですか?
- 5. JSFからJavaのアプリケーションにメッセージを送信するにはどうすればよいですか?
- 6. Webサイトからローカルマシンにメッセージを送信するにはどうすればよいですか?
- 7. JavascriptからJavaにメッセージを送信するにはどうすればよいですか?
- 8. cmdからstderrにメッセージを送信するにはどうすればよいですか?
- 9. SendGatewayMessageを使用してFlexコンシューマにメッセージを送信するにはどうすればよいですか?
- 10. dllを使用してフォームにメッセージを送信するにはどうすればよいですか?
- 11. Alfrescoでコンテンツが変更されたときにJMSメッセージを送信するにはどうすればよいですか?
- 12. Stimulsoftにパラメータを送信するにはどうすればよいですか?
- 13. SONIC JMSキューにXMLメッセージを送信
- 14. MPIで特定の宛先のないメッセージを送信するにはどうすればよいですか?
- 15. XMPPメッセージを確実にopenfireサーバーに送信する方法は?
- 16. JXTA-JXSE 2.6でピアを見つけてメッセージを送信するにはどうすればよいですか?
- 17. C#でメッセージを送信してウィンドウスタイルを変更するにはどうすればよいですか?
- 18. JMSキューに送信する前にメッセージをコミットします
- 19. メッセージを別のノードに送信するにはどうすればよいですか?
- 20. 1秒間に10件のメッセージを送信するにはどうすればよいですか?
- 21. 特定のIPとポートにsmtpメッセージを送信するにはどうすればよいですか?
- 22. メッセージの送受信をサーバースレッドに移動するにはどうすればよいですか?
- 23. セントラルエリアにデータを送信するにはどうすればよいですか?
- 24. SmackでXMPP XEP-0184「メッセージ配信確認書」を使用するにはどうすればよいですか?
- 25. WebSocketで大きなメッセージを送信するにはどうすればよいですか?
- 26. iOS 5 Twitterフレームワークで直接メッセージを送信するにはどうすればよいですか?
- 27. キーイベントをAndroidで送信するにはどうすればよいですか?
- 28. プログラムでUILongPressGestureを送信するにはどうすればよいですか?
- 29. PLISTをBluetoothで送信するにはどうすればよいですか?
- 30. C#でVK_MEDIA_NEXT_TRACKを送信するにはどうすればよいですか?
はい、JMSは完全にトランザクション可能です。しかし、あなたとあなたの質問はあまりにも曖昧になっています。 – skaffman
返信いただきありがとうございます!より詳細な回答を得るには、どのような詳細を提供する必要がありますか?私は、「メッセージを確実に送信する」ためにグーグルで行っていましたが、これは意味のある結果をもたらしませんでした。信頼できる送信(プロデューサから宛先へ)を達成するためのヒントを教えてください。ありがとう! –
どのキュー・マネージャーを使用していますか?どのような種類のトランザクションマネージャ抽象化(例:Jee、Spring)ですか?移植性とインプリメンテーションに依存しないことは強く求められていますか? – andcoz