問題タブ [openmq]
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.
apache-camel - ServiceMix+Camel から OpenMQ JMS ブローカーにアクセスする
ServiceMix+Camel を OpenMQ JMS ブローカーと通信させようとしています。メッセージを ActiveMQ JMS キューにポストする Blueprint DSL で定義された Camel ルート定義があります。これは正常に動作していますが、これを変換して、Glassfish4 コンテナー内で実行されている OpenMQ のインスタンスにメッセージを投稿しようとしています。
次の構成を実行しています: JDK 1.7.0_60 ServiceMix 5.1.1 (だから Camel 2.13.2)
このトピックに関するドキュメントは最小限ですが、こことここで Google 検索からさまざまなスニペットを集めて、次のように思いつきました (関連する部分のみ)。
Servicemix/OSGI で次の JMS 関連の「機能」が有効になっています。
また、次の OSGI バンドルがインストールされ、アクティブになっています。
問題は、Came Route ブループリントを ServiceMix にデプロイした時点で ClassNotFoundException が発生することです。ログに記録された Stacktrace からの関連するスニペットを次に示します。
したがって、これが OSGI バンドルの問題であると仮定して、依存関係を確認するためだけに Camel の「機能」を掘り下げました。
したがって、JMSContext が見つからないため、スタック トレースを引き起こしているのは「geronimo-jms_1.1_spec」であると思われます。私は、ApacheMQ が同じ JMS クラスを使用している必要があるため、環境のどこかにある必要があるという大きな仮定を立てています。また、JMSContext は JMS 2.0 API インターフェースのようですが、geronimo-jms_1.1_spec バンドルが JMS2 API を参照しようとしていることが問題なのでしょうか?
OpenMQ のクライアント JAR を環境にインストールするという問題もあります。Glassfish4 に同梱されている OpenMQ クライアント JAR はプレーン JAR であり、OSGI バンドル ( https://java.net/jira/browse/MQ-328を参照) ではないため、「file:wrap」機能を使用してこれをデプロイする予定ですServiceMix、または別の方法でアンパックして、Bean を含む JAR に再パックします。これはこの問題に関連しているとは思いませんが、間違っている可能性があります。
openmq - ループバック アドレスでは OpenMq クラスタリングはサポートされていません
ループバック アドレスでブローカーの単一インスタンスを起動すると、次のようになります。
java.net.InetAddress に関する限り、実際にはループバック アドレスである形式 127.XXX の独自の一意の IP アドレスを使用して、複数の VM/プロセスを起動できるセットアップ (実際には Azure Compute Emulator) があります。したがって、これらのアドレスをそれらの vm/プロセス間のソケット間通信に正常に使用しているという事実にもかかわらず、それらを使用して OpenMq クラスターを実行することはできません。
回避策として、ブローカを単一の非ループバック アドレスにバインドし、異なるポートを使用するように設定しましたが、これは機能します。したがって、1 つの IP アドレスでクラスター化できないわけではありません。
ループバックが許可されなかったのはなぜですか? 理論上可能であれば、クラスタリングできるようにする設定はありますか?
glassfish - 接続の割り当て中にエラーが発生しました
私の環境はGlassfish 3.1.2 b23で、JDK 1.7.0_45を搭載したWindows Server 2008上で組み込みモードのOpenMQがバンドルされています(FWIWも同じ結果でLOCALモードを試しました)。
非常に単純な JMS コンポーネントを含むアプリケーションがあります。JMS コンポーネントは、キューに送信され、MDB によって消費されるメッセージを生成するステートレス セッション Bean で構成されます。JMS 接続プールとキューは、Glassfish 管理 UI を使用して作成された管理オブジェクトです。
問題は、メッセージを通常どおりに作成して消費した後、次のエラーが表示されることです。
これは@Asynchronous
、ステートレス EJB のメソッドによって開始された自動化されたプロセスが項目のリストをリッピングし、項目ごとにコード パスを呼び出し、それが最終的にこのメッセージ生成に影響を与える場合に発生するようです。一度に 1 つのメッセージしか生成しないわずかに異なるコード パスからメッセージ生成が呼び出される場合、この問題は見られません。
メッセージはミリ秒かかります。生産し、ミリ秒。消費する。接続の最大待機時間は 1 分です。また、最大。同時にメッセージを生成できるスレッドの数は、JMS 接続ファクトリに関連付けられた接続の最大数より (約 2 倍) 少なくなります。
セッションが非 jms-transactional で AUTO-ACK であるプロデューサーは、どのくらいの速さで連続してコールできますか? Producer.send(..) が返されるとすぐに、jms 接続が返されて次のプロデューサで使用できるようになるか、次の .send 呼び出しのために接続が解放されるまでに非常にわずかな遅延時間があると想定します()?
コンシューマーは MDB であり、プロデューサーが使用しているのと同じプールからの JMS 接続も使用していると想定しています (それが唯一の JMS 接続プールであるため)。以下の imqcmd の出力は、アクティブなコンシューマが 1 つあることを示していますが、MDB がプールされているため、コンシューマ側も X # (MDB インスタンスの数) の接続を使用している可能性があることを意味します。プールされた MDB インスタンス?
MDB の例外処理にも興味があります。このパターンは、JavaEE6 サンプルおよび catches/logs Throwable から取得されました。Throwable で mdc.setRollback への呼び出しがないと、JMS 接続がリークしますか?
この問題のデバッグでは、imqcmdコマンドを使用しています。具体的には:
imqcmd query dst -tq -n MyQueue -u admin
プロデューサ: ADetailBean.java
MDB: MyMessageListener.java
MyConnectionFactory 管理対象オブジェクトの設定
接続プールの詳細タブで:
Queue 管理対象オブジェクトの設定は次のようになります。
openmq - 非デーモン スレッドが原因で組み込み OpenMQ HA ブローカーがシャットダウンしない
com.sun.messaging.jmq.jmsserver.service.HAMonitorService クラスには、Java Thread を開始する HATimerThread が含まれており、Java Thread がそれを実行します ( HATimerThread は Runnable です)。
このスレッドはデーモン スレッドではありません。
run のコードは次のとおりです。
このスレッドが終了できる唯一の方法は、repeatItr == 0 の場合です。ただし、コンストラクター (0 以外になるように呼び出す HAMonitorService のコンストラクターによって呼び出される) で設定されると、何も変更されないようです。これは、ループが終了しないことを意味します。つまり、スレッドが停止することはありません。また、デーモン スレッドではないため、VM がシャットダウンすることはありません。
これはバグですか、それとも私が考えていなかったそれを止める他のメカニズムがありますか? 現時点では、組み込みクラスターブローカーを実行しているプロセスは、残りのプロセスが正常にシャットダウンしても、このため終了しません...
これは4.5.2と5.1を使用してみました。
HATimerThread によって作成されたスレッドをデーモンに設定して 5.1 のソースを再構築したところ、すべて正常に動作するようになりました。
java - Maven から jms.jar と imq.jar を追加するには?
JMSに関するチュートリアルに従っています。
Maven 依存関係リスト:
しかし、以下の例外で失敗します:
OpenMQ ディストリビューションから jms.jar と imq.jar を追加すると、この例は問題なく動作します。しかし、mavenではそうではありません。問題はMavenが原因だと思います。
glassfish-3 - OpenMQ/Glassfish 用に STOMP Transformer を構成する方法
オブジェクトメッセージをテキストメッセージに変換する基本的なメッセージトランスフォーマーを作成しました。私は Java/OpenMQ/Glassfish の専門家ではありません
Transformer は正常にコンパイルされますが、STOMP Bridge を使用するように構成する必要があります...その方法についてオンラインで例を見つけることができません。
StompTransformer.class を C:\glassfish3\glassfish\domains\domain1\lib\ext にコピーし、必要なすべての jar を C:\glassfish3\glassfish\domains\domain1\lib\applibs にコピーしました (これが正しいかどうかはわかりません)場所)
config.properties に以下を追加しました。
ドキュメントを読んでみました: https://docs.oracle.com/cd/E19587-01/821-0027/gjdnl/index.html >>> JMS ブリッジの設定
しかし、それは私を混乱させます:( XMLファイルに何を入れるべきか、何と呼ぶべきか、どこに置くべきか、そして構成に他に何が必要なのかわかりません.....
Transformer のコードは次のとおりです。
java - メッセージの非同期読み取り中の JMS タイプのチェック
JMS にキューがあります。メッセージをキューに送信する際に、JMStype を「XYZ」と指定しています。コンシューマー側には onMessage リスナーがあります。私が知りたいのは次のことです
- onMessage リスナーで、メッセージをデキューせずにメッセージの JMStype を確認するにはどうすればよいですか。実行中のインスタンスが JMStype が 'XYZ' ではないことを検出した場合、何も実行せず、キューからデキューするべきではありません。JMS タイプ「XYZ」のメッセージを必要とするインスタンスのみが、メッセージをキューから取り出してさらに処理する必要があります。
私の質問を読んでくれてありがとう。
java - OpenMQ でタイムアウト後にメッセージが失われる
OpenMQ を使用するシステムがあります。消費者からこのエラーを受け取ることがあることに気付きました。
また、そのメッセージは失われ、キューから削除されます。
imqAckTimeoutを増やすことでこれを修正できることはわかっていますが、タイムアウトの問題があるのではないかと考えています。メッセージがキューから削除されるのはなぜですか?
メッセージ キューを初めて使用するので、問題の解決に役立つ情報を教えてください。
java - Glassfish と OpenMQ を使用してリモート プロデューサーからメッセージを同期的に受信する JMS コンシューマー
リモート Consumer インスタンスに Glassfish と OpenMQ を使用して、メッセージ Producer のキューを検索し、要求を同期的に処理しています。
Synchronous Consumer with JMS Queueに関する McIntosh の回答によると、同期メッセージの受信はスケジューリングによって処理できます。これを行う予定ですが、以下に示すように、非同期メッセージ駆動型 Bean (MDB) を介してメッセージ キューに接続する例しか見たことがありません。
MessageListener
メッセージ駆動型 Bean として実装および設定せずにリモート プロデューサー キューに接続するにはどうすればよいですか?