次の 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 に、重複したコピーを保持しているように見えます。