21.3.2. JMS を介したストリーミング
JMS を使用する場合、オブジェクトプロパティーを設定することにより、HornetQ は、コア API のストリーミングメソッドをマッピングします (表21.1「org.hornetq.api.core.client.ClientMessage API」 を参照)。入力および出力ストリームを設定するには、メソッド
Message.setObjectProperty
を使用できます。
InputStream
は、送信されるメッセージで JMS Object Property JMS_HQ_InputStream によって定義できます。
BytesMessage message = session.createBytesMessage(); FileInputStream fileInputStream = new FileInputStream(fileInput); BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream); message.setObjectProperty("JMS_HQ_InputStream", bufferedInput); someProducer.send(message);
OutputStream
は、ブロッキングの方法で受信されるメッセージで、JMS Object Property JMS_HQ_SaveStream によって設定できます。
BytesMessage messageReceived = (BytesMessage)messageConsumer.receive(120000); File outputFile = new File("huge_message_received.dat"); FileOutputStream fileOutputStream = new FileOutputStream(outputFile); BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutputStream); // This will block until the entire content is saved on disk messageReceived.setObjectProperty("JMS_HQ_SaveStream", bufferedOutput);
OutputStream
の設定は、プロパティー JMS_HQ_OutputStream を使用して非ブロッキングの方法で行うこともできます。
// This will not wait the stream to finish. You need to keep the consumer active. messageReceived.setObjectProperty("JMS_HQ_OutputStream", bufferedOutput);
注記
JMS を使用する場合、大きいメッセージのストリーミングは、
StreamMessage
と BytesMessage
でだけサポートされます。