問題タブ [spring-jms]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 複数回インスタンス化された FailoverTransport
spring-jms バージョン 3.0.5 と activeMQ バージョン 4.5.2 を使用しています。Tomcat にデプロイすると、すべてが正常に動作するように見えます。WebSphere にデプロイすると、4 つの別個のフェイルオーバー トランスポートがインスタンス化されているように見え、MessageListener 実装は、トピックにパブリッシュされるメッセージごとに同じメッセージを 4 回受信します。
これが私の設定です:
これが私のメッセージリスナーです:
そして、これがログに表示されるものです(WebSphereのみ)
トピックにパブリッシュすると、次のように表示されます。
を設定すると、この種の動作が予想される可能性があるという兆候を見てきましたconcurrentConsumers > 1
が、私が知る限り、そうではありません。これらのメッセージを 1 回しか受信していないことを確認するにはどうすればよいですか?
アップデート:
デバッグ ロギングをオンにすると、次のようにも表示されます。
Spring がこれらの Bean を 4 つ作成するのはなぜですか?
spring - Spring で JMS トランザクションを管理する
Spring と HornetQ で JMS トランザクションを管理しようとしています。
これは私が書いたコードです:
読み取りをブロックしたくないので、タイムアウトを 0 に設定して、キューから同期読み取りを行っています。このため、何かが実際に受信されたかどうかを確認する必要があります。
これは私のapplicationContext.xmlの抜粋です:
私が抱えている問題は非常に奇妙です。最初にメッセージを受信すると、handleMessage が失敗するため、トランザクションをロールバックします。その後、何も起こりません。JMX コンソールで確認すると、キューに 1 つのメッセージがあることがわかります。ここで JBoss を再起動すると、予想どおり、メッセージが何度も受信されます。
構成に問題があるのかもしれませんが、再起動後に機能するのはなぜですか?
- HornetQ 2.2.10
- JBoss 5.1.0
- 春 3.1.2
更新
デバッグを有効にすると、初めて表示されます:
DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) [null] という名前の新しいトランザクションを作成: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
最初のロールバックの後、その後の受信とロールバックで次のように表示されます。
DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) 既存のトランザクションに参加
代わりに、JBoss を再起動した後、トランザクションが実際にロールバックされていることを読みました。
DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) トランザクション ロールバックの開始 2012-11-05 09:54:14,436 DEBUG [org.springframework.jms.connection.JmsTransactionManager] (baseScheduler-1) JMS のロールバックセッションでのトランザクション
では、なぜロールバックが初めて発生せず、サーバーを再起動するとすぐにロールバックが常に発生するのでしょうか? 私は何を間違っていますか?
spring - 単一のポイント ツー ポイント キューと複数のリスナー
複数のプロデューサーからメッセージを受信する単一の「ポイント ツー ポイント」IBM MQ キューがあります。私のアプリケーションは、キューからのメッセージを消費します。メッセージを非同期的に消費するために、春の「jmstemplate」と「DefaultMessageListenerContainer」を使用しています。
私のアプリケーションは 2 つの jvm で実行されています。つまり、同じキューをリッスンしている各 jvm でアクティブなリスナーが 2 つあります。
私の質問に来て、メッセージが届いたら...
1) リスナーは、メッセージがキューに到着したことをどのように認識しますか?
2) 2 人のリスナーのうち、メッセージを受け取るのはどちらですか? メッセージをリスナーに配信するためのアプローチは何ですか?
3) 単一のキューに対して「N」個のリスナーにスケーリングできますか? リスナーが 10 人に増えた場合、スケーリングはどのように機能しますか? メッセージはどのようにリスナーに配信されますか?
4) MQ サーバーは、同じメッセージが複数のリスナーに送信されないようにするにはどうすればよいですか?
これらは単純な質問かもしれませんが、上記のシナリオがどのように機能するかを掘り下げることはできません. あなたの考えを共有してください...
jms - JMS / ActiveMQ:クラスメンバーとしてオブジェクトを含むオブジェクトを送信する
リモートOSGi-Containerにメッセージを送信するためにActiveMQ(Springを使用)を使用しています。これは非常にうまく機能しますが、1つの問題があります。
Serializableを実装する2つのクラスがあります。次のように、一方のクラスはもう一方のクラスのクラスメンバーです。
したがって、が親インスタンスを送信すると、親のメンバーはnullになります。
私の問題が何であるかを理解していただければ幸いです:)
編集:面白い問題:正しくシリアル化されたjava.util.dateをクラスに取得しましたが、これが唯一のものであり、すべてのDoubleなどはnullです。
spring - Active MQ + Spring 3.0 - リクエスト/レスポンスの実装 - サンプル プログラムはレスポンスを取得しましたが、メッセージ コンシューマの数は増え続け、いつまでも待機しています
Spring 3 + Active MQ Request/Response Synchronos を実装するサンプル プロジェクトを試しています。Spring 構成ファイル、メッセージをキューに入れるメッセージ プロデューサー、およびメッセージを消費して応答を返すメッセージ コンシューマーを作成しました...
応答が返ってきました...しかし、サンプル プログラムが終了していないようです... Apache Active MQ 管理コンソールを確認すると、テスト クラスを実行するたびに NUMber of Consumers の数が増え続けていることがわかります...管理コンソールでカウントを下げるために、Eclipseで手動で終了する必要がありました...
ここでこのスレッドを参照しました -スタック オーバーフロー スレッド- 同じ問題に直面した人..
だからここに私のコードがあります
リクエスター クラス
パブリック クラス リクエスタ {
}
メッセージ リスナー クラス
public class TestMessageListener は MessageListener を実装します {
}
ワーカー クライアント クラス
public class WorkerClient は ApplicationContextAware を実装します {
ついにテストクラス
}
では、メッセージ コンシューマーが戻ってきてテスト クラスが終了するのを修正するにはどうすればよいでしょうか。助けてください....
java - weblogic 10.3サーバーで春にJMSメッセージを遅らせる方法
メッセージごとに異なる特定の時間までメッセージ配信を遅らせたい。
の使用を推奨する weblogic 10.3 WLMessage のドキュメントを参照しjavax.jms.Message.getIntProperty("JMS_BEA_DeliveryTime")
ました。
JMS_BEA_DeliveryTime
ただし、どのように設定すればよいかわかりませんINTEGER
。私はそれを期待していましたlong
。
この属性に関するドキュメントを見つけることができず、JMS_BEA_DeliveryTime
それを設定および使用する方法を説明できません。希望の配達時間を設定する方法や、この属性の使用に関するドキュメントへのリンクの例を誰か教えてください。
私のコードは、Spring JMS テンプレートの典型的な使用法に似ています。
メッセージを返す前に配信時間のヘッダーを設定できるかどうか疑問に思っていました。
apache-camel - Camel-カスタムjmsOperationsを使用:org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplateにキャストできません
カスタムjmsOperationsを使用したいのですが、クラスキャスト例外を取得しようとすると、org.apache.camel.component.jmsにキャストできません。JmsConfiguration $ CamelJmsTemplate
構成:
私が作成したサンプルクラス
jmsOperationsを試している理由:元のJMSPriorityを維持する必要があります。はい、preserveQoSのexplicitQoSを試しました[enableingなどのさまざまな組み合わせ。すべての優先度を4に設定します。または、eg=6優先度を設定しても優先度はゼロのままです]。独自のjmsOperationsを作成し、JMSPriority値を明示的に転送します。
例外トレース:
原因:org.apache.camel.FailedToCreateProducerException:エンドポイントのプロデューサーの作成に失敗しました:Endpoint [jmsErf:// queue:MQDEV.MYQ.ERROR]。理由:java.lang.ClassCastException:blabla.MyJmsTemplateをorg.apache.camel.component.jms.JmsProducer.testConnectionOnStartup(JmsProducer.java:458)のorg.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplateにキャストできません。 org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)at org.apache.camel.util.ServiceHelperのorg.apache.camel.component.jms.JmsProducer.doStart(JmsProducer.java:469) startService(ServiceHelper.java:62)at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:387)... 115 more原因:java.lang.ClassCastException:bla.MyJmsTemplateをorgにキャストできません。 apache.camel.component.jms。
キャメルでのjmsOptionsの使用法を誰かに教えてもらえますか?
java - Spring Bean 初期化のための ActiveMQ 接続フェイルオーバー検出
ブローカーがダウンしているために確立できなかった ActiveMQ 接続の例外をキャッチしようとしています。
次のコードで:
ブローカがダウンしている場合、ブローカへの接続試行は無限ループに入ります。URLをに変更すると
2回試行してから例外をスローします(これが私が望んでいることです)。
ここで、Spring Bean を使用して次のように接続オブジェクトを初期化するとします。
2回の試行で接続に失敗したというエラーメッセージが表示されますが、5秒ごとに同じエラーメッセージが再び表示され、無限ループに陥った後も再接続が試行されます。
この無限ポーリングを停止し、失敗した場合に例外 (PostInit を使用している可能性があります) をキャッチする方法を知りたいです。
java - ネストされた例外は javax.jms.InvalidDestinationException: 不明な宛先タイプです - $Proxy115
メッセージをキューに送信しようとすると、この例外が発生します。私の jms プロパティは spring application-context を介して設定されています。jms に設定されている applicationContext.xml プロパティを見つけてください。
以下のように例外が発生しています:
jms - Spring JMSリスナープール内で飢餓を防ぎ、最小限のスループットを確保するための最良の方法
JMS リスナー プールがあります。
一部のメッセージ タイプが他のすべてのメッセージ タイプを枯渇させたりブロックしたりしないようにする方法を探しています。例: foo1 メッセージの処理専用に、プールの少なくとも M パーセント、ただし N パーセントを超えないようにしたいと考えています。
現在、これをそのままにしておくと、プール内の 10 個のスレッドすべてが foo1 メッセージ専用になってしまいます。foo{2-4} メッセージは待機する必要があります。foo1 リスナーにタイムアウトを強制することで、このような飢餓を防ぐことができますが、スループットの目標を達成できません。
これを達成するための簡単な構成ベースの方法はありますか? 一度に 2 つの JMS リスナー プールを実行できますか?
それとも、1 つは foo1 メッセージ専用、もう 1 つは foo2-4 メッセージ専用の 2 つのまったく異なるサーバー フリートをセットアップするのが最も安全な方法ですか?
理想的には、次のようなことをしたいと思います。ただし、「同時実行」は jms:listener の属性ではなく、単なる jms:listener-container です。
ありがとう。