Java Reference
In-Depth Information
•
Synchronously
: A subscriber or a receiver explicitly fetches the message from
the destination by calling the
receive()
method of any
MessageConsumer
instance. The
receive()
method can block until a message arrives or can take
a time out if a message does not arrive within a specified time limit.
•
Asynchronously
: With the asynchronous mode, the client must implement the
javax.jms.MessageListener
interface and overwrite the
onMessage()
method. Whenever a message arrives at the destination, the JMS provider delivers
the message by calling the listener's
onMessage
method, which acts on the con-
tents of the message.
A JMS message consists of a header, properties, and a body. The message headers provide
a fixed set of metadata fields that describe the message with information such as where
the message is going and when it is received. The properties are a set of key-value pairs
used for application-specific purposes, usually to help filter messages quickly when they
are received. Finally, the body contains whatever data is being sent to the message.
The JMS API supports two delivery modes for messages to specify whether or not the
messages are lost if the JMS provider fails, indicated by the following constants:
• The
persistent
delivery mode, which is the default, instructs the JMS provider to
take extra care to ensure that a message is not lost in transit in the case of a JMS
provider failure. A message sent with this delivery mode is logged to stable stor-
age when it is sent.
• The
nonpersistent
delivery mode does not require the JMS provider to store the
message or otherwise guarantee that it is not lost if the provider fails.