18.4. Work with Large Messages
18.4.1. Work with Large Messages
HornetQ supports the use of large messages even when either the client or server has limited amounts of memory. Large messages can be streamed as they are, or compressed further for more efficient transferral. A user can send a large message by setting an
InputStream
in the body of the message. When the message is sent HornetQ reads this InputStream
and transmits data to the server in fragments.
The client or the server never store the complete body of a large message in memory. The consumer initially receives a large message with an empty body and thereafter sets an
OutputStream
on the message to stream it in fragments to a disk file.
18.4.2. Configuring HornetQ Large Messages
Configuring the Server
In Standalone mode large messages are stored in EAP_HOME/standalone/data/largemessages
directory. In Domain mode large messages are stored in EAP_HOME/domain/servers/SERVERNAME/data/largemessages
directory. The configuration property large-messages-directory
indicates the location where large messages are stored.
Important
To achieve best performance, we recommend storing the large messages directory on a different physical volume to the message journal or the paging directory
18.4.3. Configuring Parameters
You can configure HornetQ large messages by setting various parameters:
- Using HornetQ Core API on Client Side
- If you are using HornetQ Core API on client side you need to set
ServerLocator.setMinLargeMessageSize
parameter to specify minimum size of large messages. The minimum size of large messages(min-large-message-size) is set to 100KiB by default.ServerLocator locator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(NettyConnectorFactory.class.getName())) locator.setMinLargeMessageSize(25 * 1024); ClientSessionFactory factory = HornetQClient.createClientSessionFactory();
- Configuring server for Java Messaging Service (JMS) clients
- If you using Java Messaging Service (JMS) you need to specify the minimum size of large messages in the attribute
min-large-message-size
of your server configuration files (standalone.xml
anddomain.xml
). The minimum size of large messages(min-large-message-size) is set to 100KiB by default.Note
The value of the attributemin-large-message-size
should be in bytesYou may choose to compress large messages for fast and efficient transfer. All compression/de-compression operations are handled on client side. If the compressed message is smaller thanmin-large-message-size
,it is sent to the server as a regular message. Using Java Messaging Service (JMS) you can compress large messages by setting the boolean propertycompress-large-messages
"true" on the server locator or ConnectionFactory.<connection-factory name="ConnectionFactory"> <connectors> <connector-ref connector-name="netty"/> </connectors> ... <min-large-message-size>204800</min-large-message-size> <compress-large-messages>true</compress-large-messages> </connection-factory>