Show Table of Contents
21.3. Streaming large messages
HornetQ supports setting the body of messages using input and output streams (
java.lang.io).
These streams are then used directly for sending (input streams) and receiving (output streams) messages.
When receiving messages there are two ways to deal with the output stream; you may choose to block while the output stream is recovered using the method
ClientMessage.saveOutputStream or alternatively using the method ClientMessage.setOutputstream which will asynchronously write the message to the stream. If you choose the latter the consumer must be kept alive until the message has been fully received.
You can use any kind of stream you like. The most common use case is to send files stored on your disk, but you could also send things such as:
- JDBC Blobs
SocketInputStream- Things recovered from
HTTPRequests, and so on.
Anything that implements
java.io.InputStream for sending messages, or java.io.OutputStream for receiving them can be used.
21.3.1. Streaming over Core API
The following table shows a list of methods available at
ClientMessage which are also available through JMS by the use of object properties.
Table 21.1. org.hornetq.api.core.client.ClientMessage API
| Name | Description | JMS Equivalent Property |
|---|---|---|
| setBodyInputStream (InputStream) | Set the InputStream used to read a message body when sending it. | JMS_HQ_InputStream |
| setOutputStream (OutputStream) | Set the OutputStream that will receive the body of a message. This method does not block. | JMS_HQ_OutputStream |
| saveToOutputStream (OutputStream) | Save the body of the message to the OutputStream. It will block until the entire content is transferred to the OutputStream. | JMS_HQ_SaveStream |
To set the output stream when receiving a core message:
... ClientMessage msg = consumer.receive(...); // This will block here until the stream was transferred msg.saveToOutputStream(someOutputStream); ClientMessage msg2 = consumer.receive(...); // This will not wait the transfer to finish msg.setOutputStream(someOtherOutputStream); ...
Set the input stream when sending a core message:
... ClientMessage msg = session.createMessage(); msg.setInputStream(dataInputStream); ...

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.