問題タブ [jmstemplate]
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.
jms - 明示的に設定したメッセージ プロパティが表示されない (Spring/JMS/MQ)
2 つの別個のプロセスが MQ 上の JMS を介して通信しています。
ライターは文字列プロパティを設定します。
MessageAction
ログに示されているように、これが実行されます。
Setting message property (GmmThreadId, CASHFLOW-1234)
リーダーは、メッセージ セレクターを使用してこのメッセージを取得します。(Spring の JmsTemplate v1 を使用 -私が知っている古いバージョンですが、ベンダーのフレームワークに組み込まれており、使用せざるを得ません。 )
template.receiveSelected(queue, "GmmThreadId = 'CASHFLOW-1234' or GmmThreadId IS NULL");
キューにある唯一のメッセージは、ライターがメッセージ プロパティを設定したことをログが示しているメッセージです。リーダーのログで、プロパティを列挙し、GmmThreadId の値も記録しようとしました。また、プロパティ GmmThreadId が存在しないことも示しています。
私のメッセージセレクターがのみの"GmmThreadId = 'CASHFLOW-1234'"
場合、何もデキューされないことに注意してください。
WebSphere MQ Explorer を使用してメッセージを表示すると、アプリケーション セットのメッセージ プロパティを表示する場所が見つかりません。違いがある場合、メッセージ タイプは MQSTR です。
リーダーとライターの両方のアプリケーションが WebSphere v6 で実行されています。
どこが間違っていますか?
spring - JmsTemplate で遅延初期化が受け入れられない
JMSTemplate を利用して、Tibco EMS サーバーとの間で JMS メッセージを送受信する Spring ベースのアプリケーションを開発しています。
現在の実装では、EMS サーバーがダウンしている場合、TomCat の起動中にプロジェクトが失敗します。これは、Spring 構成ファイルに、EMS サーバーに接続しようとしている JMS 関連の Bean があるためです。
したがって、1 つの解決策は、すべての JMS 関連 Bean が必要な場合にのみ開始されるようにすることです (起動時ではありません)。そのために、すべての JMS 関連 Bean の lazy-init 属性を true に設定します。
抜粋:
ここに問題があります。jmsTransactionManagerlazy-init="true"
Bean にのみ設定すると、プロジェクトは問題なく正常にロードされます。ただし、jmsTemplateWithClientAcknowledge Bean も設定するとすぐに、プロジェクトは失敗します。同じ失敗の理由: EMS サーバーに接続できませんでした。lazy-init="true"
ログからのエラー:
org.springframework.beans.factory.BeanCreationException: 'jmsMsgSenderImpl' という名前の Bean の作成中にエラーが発生しました: 自動配線された依存関係の注入に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.jms.core.JmsTemplate com.cv.pub.engine.service.impl.JmsMsgSenderImpl.jmsTemplate; です。ネストされた例外は org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された名前 'jmsTemplateWithClientAcknowledge' を持つ Bean の作成中にエラーが発生しました: 設定中に Bean 'internalJmsQueueConnectionFactory' への参照を解決できませんBean プロパティ 'connectionFactory'; ネストされた例外は org.springframework.beans.factory.BeanCreationException: Error creating bean with name ' です ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された internalJmsQueueConnectionFactory': Bean プロパティ 'targetConnectionFactory' の設定中に Bean 'targetJmsQueueConnectionFactory' への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された名前 'targetJmsQueueConnectionFactory' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://localhost:7222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://localhost: Failed to connect to the server at tcp://localhost:7222] :7222] Bean プロパティ 'targetConnectionFactory' の設定中に Bean 'targetJmsQueueConnectionFactory' への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された名前 'targetJmsQueueConnectionFactory' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://localhost:7222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://localhost: Failed to connect to the server at tcp://localhost:7222] :7222] Bean プロパティ 'targetConnectionFactory' の設定中に Bean 'targetJmsQueueConnectionFactory' への参照を解決できません。ネストされた例外は org.springframework.beans.factory.BeanCreationException: ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された名前 'targetJmsQueueConnectionFactory' を持つ Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://localhost:7222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://localhost: Failed to connect to the server at tcp://localhost:7222] :7222] ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された targetJmsQueueConnectionFactory : init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://localhost:7222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://localhost: Failed to connect to the server at tcp://localhost:7222] :7222] ServletContext リソース [/WEB-INF/spring/jms-context.xml] で定義された targetJmsQueueConnectionFactory : init メソッドの呼び出しに失敗しました。ネストされた例外は javax.naming.ServiceUnavailableException: Failed to query JNDI: Failed to connect to the server at tcp://localhost:7222 [Root exception is javax.jms.JMSException: Failed to connect to the server at tcp://localhost: Failed to connect to the server at tcp://localhost:7222] :7222]
あなたの考えと助けに感謝します!
spring - Spring JMS インジェクションによりアプリケーションが起動しない
リモートアプリケーションサーバーでキューを発行およびリッスンするSpringアプリケーションがあります。スプリング ベースのパブリッシャーとリスナーは、独自のアプリケーション サーバー内でリッスンします。
テスト環境で抱えている問題の 1 つは、他のアプリです。サーバーが起動していないため、テストアプリケーションが起動し、JmsTemplate をconnectionFactoryで注入しようとすると、有効な接続ではなく、アプリケーション全体の読み込みに失敗するため、失敗します。これは、JMS とは何の関係もない私たちのグループの他の開発者に悲しみをもたらしています。彼らがやりたいことはコードを実行してテストすることだけですが、JmsTemplate connectionFactory はダウンしています。
アプリケーションを適切に起動できるようにするために、Spring がいくつかの悪いインジェクションを無視できるようにするための提案はありますか? ありがとう
spring - Spring を使用してアプリケーションで SMS を送信するには?
JMS と Spring で SMS を送信したいのですが、どうすればよいですか? チュートリアルまたはサンプルを教えていただけますか?
java - ACTIVEMQ - パブリッシャー サブスクライバー Hello World の例
サブスクライバーとパブリッシャーの 2 つのプログラムがあります。サブスクライバーはメッセージをトピックに配置でき、メッセージは正常に送信されます。ブラウザで activemq サーバーを確認すると、 1 msg enqueued と表示されます。しかし、消費者コードを実行すると、メッセージが受信されません
プロデューサーコードは次のとおりです。
このコードを実行すると、コンソールの出力は次のようになります。
そして、ここに消費者コードがあります:
このコードを実行した後、何も表示されません。誰かがこの問題を克服するのを手伝ってくれますか?
jms - JMS メッセージが追加されない
HornetQ の使用中に奇妙な状況に直面しています。
私のアプリケーション アーキテクチャ -
- JMS プロバイダー : HornetQ (スタンドアロン サーバー、他には使用されません。このサーバーに Q1 と Q2 などの 2 つのキューを作成しました)。
- Producer : 別のマシンにデプロイされた Web アプリケーション。このアプリケーションは、「ObjectMessage」のインスタンスを作成し、「Job」クラスのインスタンスを引数として「ObjectMessage.setObject()」メソッドに渡し、メッセージを Q1 に追加します。Spring JMS を使用します。
メッセージをキューに追加する前に、メッセージに「AGENT」という名前の文字列プロパティも設定します。
奇妙なのは、ObjectMessage.setStringProperty("AGENT", null) を呼び出した場合、またはメッセージ自体にプロパティを追加しなかった場合、メッセージが Q1 に追加されないことです。ただし、これは第 2 四半期には発生せず、HornetQ の JMX コンソールでメッセージを確認できます。
注意すべきキュー固有の構成はありますか?
あいまいな表現で申し訳ありません - 私のチームと私は、この問題を解決するのに苦労してきました。
ありがとう。
spring - SpringJmsTemplateを使用してJMSメッセージがキューに到達するのを遅らせる方法
私が理解しているように、これはキューサーバープール内のスレッドを「拘束」するため(複数のキューが構成されているため)、レシーバータイムアウトでメッセージコンシューマーをブロックしたくありません。では、カスタムスレッドなしでメッセージが送信されるのを遅らせるにはどうすればよいですか(作業はEJB 2セッションBeanによって実行されています)?それが役立つ場合は、JBossMessaging1.xがプロバイダーです。
spring - Spring JmsTemplate で JMS メッセージを送信する
別のアプリケーションにメッセージを送信する必要があるサーバーがあります。私は Spring JmsTemplate を使用していますが、構成を起動して実行する際にいくつか問題があります。
現在、次の例外が発生しています。
(必要に応じて完全なスタック トレースを投稿できますが、ネストされた例外の長いバージョンにすぎません。)
「受信タイムアウト」の部分は、メッセージを受信しようとしているように聞こえますが、これは望ましくありません。ここにあるものはすべて、いくつかの異なる例と SO の投稿からまとめたものであり、さまざまな部分とそれらが何をしているのかについて頭を悩ませています。エラーの原因に加えて、メッセージを受信しない場合に必要のないものはありますか?
私の JmsQueueSender クラス (メッセージを送信します):
私のアプリケーションコンテキストでは:
spring - JMS/spring/AMQ がメッセージを非同期的に処理しないという問題または混乱
リモートでSpring Batchを使用してバッチジョブを実行するコンポーネントをセットアップする状況があります。ジョブの xml パス、名前、パラメーターなどを含む JMS メッセージを送信し、呼び出し元のバッチ クライアントでサーバーからの応答を待ちます。
サーバーはキューを読み取り、適切なメソッドを呼び出してジョブを実行し、結果を返します。これは、メッセージング フレームワークによって次のように行われます。
理想的には、runJobSync メソッドを 2 回呼び出して、2 つのジョブを同時に実行できるようにしたいと考えています。ジョブなしで同様のことを行う単体テストがあります。このコードはあまり素晴らしいものではありませんが、次のとおりです。
最終リスト結果 = Collections.synchronizedList(new ArrayList());
そのテストを実行すると、スレッド 2 は 500 ミリ秒待機するだけなので最初に完了しますが、スレッド 1 は 1 秒待機します。
それはうまくいきます。2 つのリモート ジョブを実際に実行すると、1 つは完了するのに約 50 秒かかり、もう 1 つはすぐに失敗して戻るように設計されていますが、これは起こりません。
50 秒のジョブを開始し、すぐに即時失敗ジョブを開始します。クライアントはジョブの実行を要求するメッセージを送信したことを出力し、サーバーは 50 秒の要求を受信したことを出力しますが、ThreadPoolExecutor を使用していても、2 番目のメッセージを処理する前に 50 秒のジョブが完了するまで待機します。
自動承認でトランザクションを実行しています。
リモート デバッグを行うと、AbstractPollingMessageListenerContainer の Consumer は未処理のメッセージを表示しません (したがって、consumer.receive() は明らかに null を何度も返すだけです)。amq ブローカーの WebGUI には、2 つのエンキュー、1 つのデキュー、1 つのディスパッチ済み、1 つのディスパッチ済みキューが表示されます。これは、何かが AMQ が消費者に 2 番目のメッセージを「持たせる」ことを妨げていることを示唆しています。(プリフェッチは 1000 btw です) これは、特定のキューの唯一のコンシューマーとして表示されます。
私自身と他の数人の開発者は、ここ数日間、あちこち探し回りましたが、ほとんど行き場がありません。これが予期された動作である場合に誤って構成されたもの、またはここで何が壊れるかについての提案。
リモートで呼び出されているメソッドはまったく問題になりますか? 現在、ジョブ ハンドラー メソッドはエグゼキューターを使用して別のスレッドでジョブを実行し、future.get() を実行します (余分なスレッドはログに関連する理由のためです)。
どんな助けでも大歓迎です
transactions - JMSを使用してAQからADT(ユーザータイプ)メッセージをデキューします
JMSを介してADTペイロードメッセージを使用してOracleAQを操作する必要があります。問い合わせは簡単でした(記事http://blog.nominet.org.uk/tech/2007/10/04/spring-jms-with-oracle-aq/に従ってください):
ここで、MyMessageCreatorはmyADTMessage(jpubを使用して作成)をMessageにラップしました。正常に動作し、トランザクション内で動作します-例外はクエリをロールバックし、メッセージはキューに挿入されません。
問題はdequeingで始まりました。メッセージを同期して受信する必要があるため、最初の試行は次のとおりです。
「ADTペイロードのある宛先にはJMS-137ペイロードファクトリを指定する必要があります」と表示されます。
その問題の解決策が見つからないため、基になるオブジェクトを手動で初期化しようとしました。
ここで、aqConnectionFactoryは自動配線されたSpringBeanです。
メッセージは適切にデキューされますが、ローカルjmsトランザクションで!queueSession.commit()がないと、それらはキューにとどまり、セッションの作成をに変更するとcreateQueueSession(false, Session.AUTO_ACKNOWLEDGE)
、デキューは自動コミットモードで実行されます。
だからここで私は立ち往生しました。JmsTemplateを使用してreceive()メソッドでADTタイプのメッセージをデキューする方法、またはAQjmsSessionを既存のトランザクションにプッシュする方法について誰かが考えていますか?