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 を使用する場合、大きいメッセージのストリーミングは、StreamMessageBytesMessage でだけサポートされます。