Archive › Documentation › JMS Streams
Archived pageJMS Streams
Sometimes you need to send truly massive files (many Gb) around the network in a reliable manner. The JMS API expects JMS clients to be able to keep a message in memory at one time, so sending > 1Gb messages around ends up using way too much RAM on the client side.
To solve this problem ActiveMQ supports regular InputStream and OutputStream abstractions which work with regular JMS producers and consumers.
This allows you to use the familar streams from Java to send or receive messages of any size at all (providing your file system can handle them while keeping a low memory overhead.
Using JMS Streams
To use the streams just create an input or output stream depending on if you are reading or writing using the connection.createInputStream() or
connection.createOutputStream() methods.
e.g.
ActiveMQConnection connection = ...; Destination destination = new ActiveMQQueue("FOO.BAR"); OutputStream out = connection.createOutputStream(destination); // write the file to out out.close();
Or to consume a large message
ActiveMQConnection connection = ...; Destination destination = new ActiveMQQueue("FOO.BAR"); InputStream in = connection.createInputStream(destination) // read the stream... in.close();
There are overloaded createInputStream/createOutputStream methods which support additional paramateres to be passed.
For further reference see the javadoc.
- ActiveMQInputStream
- ActiveMQOutputStream
Note:
The counterpart classes in AMQ 3.x are :
- JMSInputStream
- JMSOutputStream