2017-07-20 8 views
0

私のシナリオでは、キューには巨大な(32MB +)メッセージが含まれており、メッセージのタイプを識別する情報が最初の数メッセージのバイト数。JMS IBM MQ - ブラウズ時に返されるメッセージのサイズを制限する

低レベルのWebsphere MQ APIを使用する場合は、特定の(制限された)サイズのバッファを用意し、MQGMO_ACCEPT_TRUNCATED_MSGフラグを含むオプションを使用してMQGETコールを発行できます。 MQGETによって返された理由コードはおそらくMQRC_TRUNCATED_MSG_ACCEPTED(これは予期される)です。

これは、各メッセージの最初の(言うことができます)100バイトの代わりに、それぞれの完全なバッファを返すロジックの一種「すべてをブラウズ」非常に高速を書くために1を可能にします。

java JMSを使用して同様のことを実行できますか? session.createBrowser(queue ...)または browser.getEnumeration()呼び出しのいずれかでバッファサイズを指定できるものが見つかりませんでした。

ありがとうございました。

+0

IBM MQではあまりにも固有の感じがします。 JMSでこのようなことは見たことがありません。悪いデザインのように聞こえる。メッセージの種類を知る必要がある場合は、各メッセージの種類ごとにトピックを使用する必要があります。このようなものがあなたを助けますか? https://docs.oracle.com/cd/E19798-01/821-1841/bncfl/index.html – duffymo

+0

ありがとう、私はあなたが提供したリンクを見ました。それは基本的に私がやっていることです。問題は、ブラウジングの通常の方法は、多くのリソースを取るそれらの巨大なメッセージをすべて返すことです。 私が可能な答えに最も近いのはこれです[リンク] https://stackoverflow.com/questions/34377185/spring-jms-ibm-mq-how-to-set-message-buffer-size-or-wait-タイムアウト) - そのポストは、ibm mq固有のjms api(私はvanilla javax.jmsクラスを使用しています)を使用しています。彼はmqrc_truncated_msg_failedを持っていますが、チャネルの問題が原因であるかのように見えます。 –

+0

あなたは私のIBMに対する同情を持っています。私はJMSに固執することを好み、ビッグブルーにあまりにも密接に結びついていない方がいいです。 – duffymo

答えて

0

パターンを選択してデータを定義するのではなく、データがあり、それをパターンに合わせたいとします。それは少し後ろです。

質問:

(1)あなたが同じキューに異なるタイプのデータを入れていますか?すなわち、複数の異なるタイプの送信者?

(2)送信者(パブリッシャ)はJMSアプリケーションですか?

(3)IIB(Message Broker)のようなメッセージを移動/フィルタするアプリケーションを作成しようとしていますか?そうでない場合は、あなたのプログラムの本当の目的は何ですか?


それぞれの独自のアプリケーションには独自のキューが必要です。キューはハロウィーンの子供たちにろうそくのように渡されるべきです。

というキューを作成しないでください "

  • トレーニング
  • 従業員の福利厚生

    • 募集
    • 給与を:

      すなわちHRは、以下の5つのアプリケーションを持っているとしましょうHR.Q 'はHRメッセージのすべてを処理します。デザインが悪い、サポートが悪い。

      むしろそれぞれの固有のアプリケーションには独自のキューが必要です。 'HR.TRAINING.Q'

    • 「HR 'HR.RECRUITING.Q'
    • 'HR.PAYROLL.Q'
    • 'HR.BENEFITS.Q'
      • すなわち.EMPLOYEES。Q '
  • +0

    私は全く同意します。しかし、私はレガシーシステムのパフォーマンスを向上させようとしています。そのため、私の選択肢は再設計の面で厳しく制限されています。ご質問のよう : 1)無 2)無 3)ではないMessage Brokerが 私が達成しようとしているすべてのそれぞれのための完全なメッセージバッファを取得することなく、巨大な大量のメッセージを閲覧することを何てくださいそれら。 低レベルのIBM MQ APIでこれを行うことができます。バニラJMSを使用して同じことを行うことができることを期待していました。 –

    +0

    なぜ最初の100バイト程度しか読み込もうとしませんか?メッセージ全体を読んで処理してみませんか?アプリケーションがメッセージを処理するかどうかを判断しようとしていますか?つまり、アプリケーションが処理しないキューにメッセージがありますか?つまり、あなたはQ1に「いいえ」と答えました。 – Roger

    +0

    キューにはXML文書が含まれています。最初の100バイトには「受信トレイ」のデータを格納するのに十分な情報が含まれています。ユーザーが興味のあるアイテムを選択するとメッセージは消費/処理されます。 最適ではありませんが、メッセージプロデューサには何の影響もありません。 。 。 –

    関連する問題