Sun Java System Message Queue 3.7 UR1 Administration Guide

Messages Are Not Reaching Consumers

Symptom:

Possible causes:

Possible cause: Limit behaviors are causing messages to be deleted on the broker.

When the number of messages or message bytes in destination memory reach configured limits, the broker attempts to conserve memory resources. Three of the configurable behaviors adopted by the broker when these limits are reached will cause messages to be lost:

To confirm this cause of the problem: Check the dead message queue, as described under Dead Message Queue Contains Messages. Specifically, use the instructions under “The number of messages, or their sizes, exceed destination limits.” Look for the REMOVE_OLDEST or REMOVE_LOW_PRIORITY reason.

To resolve the problem: Increase the destination limits. For example:

imqcmd update dst -n MyDest -o maxNumMsgs=1000

Possible cause: Message timeout value is expiring.

The broker deletes messages whose timeout value has expired. If a destination gets sufficiently backlogged with messages, messages whose time-to-live value is too short may be deleted.

To confirm this cause of the problem: Use the QBrowser demo application to look at the contents of the dead message queue and see whether messages are timing out. For the QBrowser demo’s platform-specific location, see Appendix A, Platform-Specific Locations of Message QueueTM Data and look in the tables for “Example Applications and Locations.”

Here is an example invocation on the Windows platform:

cd \MessageQueue3\demo\applications\qbrowser java QBrowser

When the QBrowser main window appears, select the queue name mq.sys.dmq and then click Browse. A list like the following appears:

QBrowser showing messages for mq.sys.dmq. For each message,
there is a number, time stamp, type, mode, and priority.

Double-click any message to display details about that message:

Message details window. Top pane shows message; middle
pane shows its properties; bottom pane contains message.

Note whether the JMS_SUN_DMQ_UNDELIVERED_REASON property for messages has the value EXPIRED.

To resolve the problem: Contact the application developers and have them increase the time-to-live value.

Possible cause: Clocks are not synchronized.

If clocks are not synchronized, broker calculations of message lifetimes can be wrong, causing messages to exceed their expiration times and be deleted.

To confirm this cause of the problem: In the broker log file, look for any of the following messages: B2102, B2103, B2104. These messages all report that possible clock skew was detected.

To resolve the problem: Check that you are running a time synchronization program, as described in Preparing System Resources.

Possible cause: Consuming client failed to start message delivery on a connection.

Messages cannot be delivered until client code establishes a connection and starts message delivery on the connection.

To confirm this cause of the problem: Check that client code establishes a connection and starts message delivery.

To resolve the problem: Rewrite the client code to establish a connection and start message delivery.