JMS messages have a number of quality of service properties that can be set. These QoS properties include the following:
the message's relative priority
the message's persistence
the message's lifespan
These properties are stored in the JMS message header. By default, the JMS broker automatically populates their values. You can, however, configure an endpoint to override the broker's default.
You configure the endpoint to set the priority for all out going JMS messages using the priority
attribute. The value you provide for the priority
attribute is used to set the JMS message's JMSPriority property.
JMS priority values can range from 0 to 9. The lowest priority is 0 and the highest priority is 9. If you do not provide a value, the JMS provider will use the default priority value of 4. The default priority is considered normal.
In JMS a message's persistence is controlled by its delivery mode property. You configure the delivery mode
of the messages produced by a JMS provider by setting its deliveryMode
attribute.
The value you provide for the deliveryMode
attribute is used to set the
JMS message's JMSDeliveryMode property.
JMS implementations support two delivery modes: persistent and non-persistent.
Persistent messages can survive a shutdown of the JMS broker. This is the default setting for JMS messages.
You can specify persistence by setting the endpoint's deliveryMode
attribute to
2
. This setting corresponds to DeliveryMode.PERSISTENT
.
Non-persistent messages are lost if the JMS broker is shutdown before they are delivered. You can specify
non-persistence by setting the endpoint's deliveryMode
attribute to
1
. This setting corresponds to DeliveryMode.NON_PERSISTENT
.
You can control how long messages persists before the JMS broker reaps them by setting the endpoint's
timeToLive
attribute. The value is the number of milliseconds you want the message
to be available from the time it is sent. The default behavior is to allow messages to persist forever.
The value of the timeToLive
attribute is used to compute the value for the
message's JMSExpirary property. The value is computed by adding the specified number
of milliseconds to the time the message is created.
By default, a JMS provider endpoint will allow the JMS provider to set these values to default values and ignore any values set through the configuration. To override this behavior, you need to set the endpoint's explicitQosEnabled
attribute to true
.
Example 4.5 shows configuration for a JMS SOAP provider whose messages have a priority of 1.
Example 4.5. Setting JMS Provider Endpoint Message Properties
<beans xmlns:jms="http://servicemix.apache.org/jms/1.0"
... >
...
<jms:soap-provider wsdl="classpath:widgets.wsdl"
destinationName="widgetQueue"
connectionFactory="#connectionFactory"
priority="1"
explicitQosEnabled="true" />
...
</beans>