3

次の JBoss/HornetQ ユーザー マニュアル ページでは、HornetQ が java.io.InputStream を使用してキューのメッセージにデータをストリーミングするメカニズムを提供する方法を確認できます。同じコードの JMS バージョンが提供されます。IBM MQSeries / WebsphereMQ を使用して同等のものに出くわした人はいますか?

JMS メッセージに配置する大量のデータがあるとします。これは単なるバイト ストリームです。Hornet の例では、ストリームはメッセージが送信されたときにのみ読み取られるため、たとえば FileInputStream の場合、バイトのチャンクをバッファリングするのに十分なメモリのみが必要です。javax.jms.BytesMessage を使用してバイトのチャンクを送信し、BytesMessage を使用してそれらをバッファリングできます。これに関する問題は、BytesMessage (com.ibm.msg.client.jms.internal.JmsBytesMessageImpl) の IBM 実装がメッセージが送信されるまでそれらをキャッシュしなければならず、それが大量のデータである場合に問題になることです。さらに悪いことに、私はバイトしか送信していませんが、IBM の実装では、1 つは BytesArrayOutputStream に、もう 1 つは DataOutputStream に、重複したコピーを保持しているように見えます。

4

2 に答える 2

1

WebSphere MQ では、あなたの説明に最も近いのは参照メッセージです。Infocenter で説明されている方法では、チャネル経由で送信される前にファイルシステム オブジェクトを取得してメッセージに入れるために、チャネル出口のカスタム プログラミングが必要です。リモート側の補完的な出口は、ペイロードをファイルに保存し、アプリに返されるメッセージにファイルへの参照を入れます。

また、一方の端で STDIN またはパイプを受け取り、もう一方の端でメッセージをキューに入れる WMQ のプログラムもあります。これらのペアは、別のマシン上のプロセス間で行指向の ASCII データが流れるパイプとして機能します。ただし、これの JMS 実装はなく、バイナリ データに対してはあまりうまく機能しません。

于 2013-01-22T18:29:56.600 に答える
0

WMQ には、グループとセグメントの概念があります。セグメンテーションは、Z/OS を除くすべての OS でサポートされています。

詳細はこちらをご確認くださいWMQでのセグメンテーション

メッセージを入れる際に、GroupId、MsgSeqNumber、および Offset を利用します。

GMO でMQGMO_COMPLETE_MSGを指定するとメッセージが表示されますが、MsgSeqNumber に従ってすべてのセグメントが自動的に結合され、

単一の GET を使用して、受信アプリケーションで単一のメッセージを取得します。

于 2013-01-22T14:16:12.240 に答える