問題タブ [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.
java - J2EE コンテナーを使用しない JNDI (JNP を使用するか? 他のプロバイダーを使用するか?)
J2EE コンテナーのオーバーヘッドなしで JNDI プロバイダーを実行する必要があります。私がやりたいことを正確に説明しているこの記事(3 ページ) の指示に従おうとしました。残念ながら、これらの指示は失敗します。jboss-common.jar もクラスパスに追加する必要がありました。これを行うと、スタック トレースが得られます。
私はこれを機能させたいと思っていますが、他の軽量のスタンドアロン JNDI プロバイダーにもオープンです。これらはすべて ActiveMQ を機能させるためのものであり、VM の外部でうまく機能する別の軽量 JMS プロバイダーを誰かが提案できれば、クライアントも機能する本格的なアプリケーション サーバーがなくても問題ありません。
java - JMS は何に適していますか?
JMS が適切な解決策である問題の (単純な) 例と、これらの場合に JMS が適切な解決策である理由も探しています。以前は、B がメッセージをすぐに処理できない場合に、A から B にメッセージを渡す手段として単純にデータベースを使用していました。
このようなシステムの架空の例として、新しく登録されたすべてのユーザーに、登録後 24 時間以内にウェルカム メールが送信されるようにする必要があります。議論のために、DB は各ユーザーが登録した時刻を記録するのではなく、各新規ユーザーへの参照 (外部キー) が pending_email テーブルに格納されていると仮定します。電子メール送信者ジョブは 24 時間ごとに実行され、このテーブル内のすべてのユーザーに電子メールを送信し、すべての pending_email レコードを削除します。
これは、JMS を使用する必要がある問題のように思えますが、私が説明したアプローチに対して JMS がどのような利点をもたらすかは明確ではありません。DB アプローチの利点の 1 つは、メッセージが永続的であることです。JMS メッセージ キューも永続化できることは理解していますが、その場合、JMS と私が説明した「メッセージ キューとしてのデータベース」アプローチとの間にほとんど違いはないように思われます。
私は何が欠けていますか?- ドン
queue - JMS キュー内のメッセージの置換
異なるプロセス間でリクエストを渡すために activemq を使用しています。場合によっては、キューに複数の重複したメッセージ (リクエスト) があります。1つだけ持っていたいです。古いメッセージを同様の属性に置き換える方法でメッセージを送信する方法はありますか? 存在しない場合、キューを調べて特定の属性を持つメッセージを確認する方法はありますか (この場合、古いメッセージが存在する場合は新しいメッセージを送信しません)。
明確化 (Dave の回答に基づく): 実際には、消費者がメッセージを受け取るたびに発生する処理の量を減らすために、キューに重複したメッセージがないことを確認しようとしています。したがって、メッセージを置き換えるか、キューに入れないようにしたいと思います。
ありがとう。
java - Spring JMS MessageConverters をネストする方法
別の MessageConverter をラップできる MessageConverter クラスを作成したいと思います。この MessageConverter は、TextMessage を生成すると想定される子コンバーターを呼び出します。ペイロードを受け取り、それを GZIP 圧縮して、最終的に送信者に返される BytesMessage を作成します。
問題は fromMessage() の書き込みにあります。ペイロードを文字列に変換して戻すことはできますが、「ダミー」の TextMessage を作成して文字列を詰め込み、子 MessageConverter の fromMessage() メソッドに渡したいと考えています。JMS セッション オブジェクトなしでは TextMessage を作成できず、このコンテキストでセッションを取得する方法がまったくないように見えるため、ここで壁にぶつかっています。
追加のプロパティを作成して、このクラスにさらに多くのものを接続することもできますが、JMSTemplate オブジェクトからセッションを簡単に取得することさえできそうになく、他に何が必要か想像もつきません。
子 MessageConverter の文字列をラップするためだけに、このコード内にプライベート TextMessage 実装を作成しようとしています。そのクラスでは、インターフェースを具体化するために大量のダミー メソッドが必要になります。
誰かがより良い方法を提案できますか?
java - JMS テキスト メッセージの本文をどのようにフォーマットしますか?
誰もがメッセージで XML を使用しているだけですか? XML に代わる優れた方法はありますか? XML を使用する場合、サービスにメッセージを送信する方法をクライアントが認識できるように XML スキーマを定義しますか?
web-services - リアルタイム SOA アプリケーションに最適なメッセージング メディアは?
私は、SOA スタイルを使用して実装されたリアルタイム アプリケーションに取り組んでいます (いくつかのメッセージング プロトコル - JMS、MQ、または HTTP を介して接続された疎結合コンポーネントを読み取ります)。
このシステムを設計したアーキテクトは、JMS を使用してコンポーネントを接続することを選択しました。このシステムはリアルタイムであるため、1 つのコンポーネントに障害が発生した場合にメッセージをキューに入れる必要はありません (トランザクションは単にタイムアウトします)。さらに、保証された配信やロールバックは必要ありません。
この場合、HTTP Web サービスのようなもの (速度、リソース フットプリントなど) よりも JMS を使用する利点はありますか?
私が考えていることの 1 つは、JMS のアプローチではスレッド プール サイズ (JMS トピック/キューをリッスンするコンポーネントの数) を設定する必要があるため、この追加の構成がそうではないため、HTTP サービスの方が適しているのではないかということです。必要です (HTTP 要求ごとに新しいスレッドが作成され、サーバーがリソースを使い果たすまで、アプリケーションを "無制限" の数の要求に拡張できます)。
何か不足していますか?
java - javax.jms が存在しません - activemq の例をコンパイルしています
activemq に付属の例をコンパイルしようとしています
apache-activemq-5.1.0\example\src\ 内
TopicPublisher.java、CommandLineSupport.java
netbeans を介してコンパイルすると、javax.jms が存在しないという参照の問題が発生します。
j2ee.jar、openjms、sun jms を試しましたが、すべて同じエラーが発生します。
また、org.apache.activemq.util が存在しないことについて不平を言っていますが、activemq-all-5.1.0.jar を参照しています。
注:外部jarへの他のすべての参照は正常に機能しています
何か案は?
編集:参照する必要があるjarは
libフォルダーのactivemqバイナリdistにあります
java - データソースを持つメッセージ駆動型 Bean
私の質問は、jboss で構成された JMS データソースを使用するように EJB 3.0 スタイルのメッセージ駆動型 Bean を構成する方法です。
たとえば、私の MDB は次のようになります。
しかし、Bean を特定の JMS データソースにアタッチしたいと考えています (jboss 4.2.2 の場合、これは deploy/jms/jms-ds.xml にあります)。おそらくこれは不可能かもしれませんが、尋ねる価値があります。
logging - すべてのメッセージのJMSキューロギング/ブラウジング(キューの非表示コンシューマ)(OpenJMS)
JMSキューを参照/ログに記録するための優れた方法があるかどうか、考えがありますか?(私はOpenJMSを使用しています)
トピックについては、もう1つのコンシューマーを追加するだけで済みます。それだけですが、キューを使用しても、まだソリューションを完成させていません。特定のキューとトピックにあるすべてのメッセージを、キューから「ポップ」せずにログに記録したいと思います(これにより、ロガーはキューを「非表示」に参照できます)。
javax.jms.QueueBrowserを使用すると、キューのスナップショットを取得できますが、「リスナーソリューション」を提供していないようです。無限ループでキュー上のすべてのメッセージを何度も読み取り、両方のメッセージが書き込まれないことを期待しています。スナップショットの前に消費されました-それは良い解決策のようには思えませんでした。
もう1つのオプションは、「論理キュー」ごとに2つのキューを作成することです。1つはロガー用、もう1つは実際の使用用です。ロガーはメッセージを「実際のキュー」に転送します。これは機能する可能性がありますが、より良い解決策があるでしょうか。
したがって、誰かが「見えない」ロガーによってキュー内のすべてのメッセージを取得するソリューション、またはロギングのための他の優れたソリューションを持っている場合、それはクールです。
jms - activemq での TCP エンドポイントの単純なルーティングの何が問題なのですか?
TCP から TCP へのルートを示す簡単なデモを ActiveMQ で開始しようとしています。activemq.xml 構成ファイルのキャメル コンテキストでエンドポイントとルートをコーディングしています。
なぜこれがうまくいかないのですか?
AMQ サーバーがリッスン ポートを開いていないようです。
編集: ここでの目的は、単純なデモンストレーションとして、2 つの telnet ターミナル (A と B) を使用して ActiveMQ に接続し、メッセージ キュー サーバーを介して一方から他方へメッセージをルーティングできるようにすることです。後で、コンテンツに基づいてフィルタリングまたはルーティングを試みる場合があります。