Dead Letter Queue (DLQ) - Collect troubleshooting data for a DLQ problem on Windows - Middleware News
Dead Letter Queue (DLQ) - Collect troubleshooting data for a DLQ problem on Windows -Middleware News
Problem
Documentation required by the support team for a WebSphere MQ Dead Letter Queue (DLQ) problem on the Windows operating systems. Gathering this information before calling IBM support helps expedite the troubleshooting process and saves you time
Collecting documentation required by the support team
Required documentation:
* Error logs
* Browse of messages on the dead letter queue
* Use the amqsbcg sample program to browse the messages on the DLQ.
Example: amqsbcg MY_DLQ MY_QMGR > amqsbcg.out
+ Where MY_DLQ is the name of your DLQ
+ Where MY_QMGR is the name of your queue manager
Troubleshooting hints and tips
Process to determine why a message is on the DLQ (dead letter queue):
1. Browse the message on the dead letter queue.
2. Locate the dead letter header. The dead letter header starts with the characters '"DLH". Example: 444C 4820 0100 0000 0A01 0000 4D59 2E51 'DLH ........MY.Q'
3. Find the dead letter Reason (the reason the message arrived on the DLQ) in the third word in the dead letter header. In this example the dead letter Reason is: x'0A01 0000'.
4. Perform this step only on Intel processors (Windows, Linux-Intel and OS/2) . On an Intel processor the dead letter reason is in little-endian format (low-order bytes first). Byte swap x'0A01 0000' little-endian, to x'0000 010A' big-endian.
5. Convert hex x'0000 010A' to decimal 266.
6. Use the dead letter reason code to determine why the message was placed on the dead-letter queue. The deal letter reason code is a Reason Code (MQRC_*) ,or a Feedback Code (MQFB_*). Example: MQFB_TM_ERROR 266 X'0000010A'
7. See the dead letter message example (amqsbcg.txt) attached to the bottom on this technote.
Invoking the DLQ handler
Invoke the DLQ handler using the runmqdlq command. You can name the DLQ you want to process and the queue manager you want to use in two ways:
* As parameters to runmqdlq from the command prompt. For example:
runmqdlq ABC1.DEAD.LETTER.QUEUE ABC1.QUEUE.MANAGER
* In the rules table. For example:
INPUTQ(ABC1.DEAD.LETTER.QUEUE) INPUTQM(ABC1.QUEUE.MANAGER)
The above examples apply to the DLQ called ABC1.DEAD.LETTER.QUEUE, owned by the queue manager ABC1.QUEUE.MANAGER.
If you do not specify the DLQ or the queue manager as shown above, the default queue manager for the installation is used along with the DLQ belonging to that queue manager.
The runmqdlq command takes its input from stdin; you associate the rules table with runmqdlq by redirecting stdin from the rules table.
To run the DLQ handler you must be authorized to access both the DLQ itself and any message queues to which messages on the DLQ are forwarded. For the DLQ handler to put messages on queues with the authority of the user ID in the message context, you must also be authorized to assume the identity of other users.
For more information about the runmqdlq command, see runmqdlq (run dead-letter queue handler).
The sample DLQ handler, amqsdlq
In addition to the DLQ handler invoked using the runmqdlq command, WebSphere MQprovides the source of a sample DLQ handler, amqsdlq, whose function is similar to that provided by runmqdlq. You can customize amqsdlq to provide a DLQ handler that meets your requirements. For example, you might decide that you want a DLQ handler that can process messages without dead-letter headers. (Both the default DLQ handler and the sample, amqsdlq, process only those messages on the DLQ that begin with a dead-letter header, MQDLH. Messages that do not begin with an MQDLH are identified as being in error, and remain on the DLQ indefinitely.)
In WebSphere MQ for Windows, the source of amqsdlq is supplied in the directory:
c:\Program Files\IBM\WebSphere MQ\tools\c\samples\dlq
and the compiled version is supplied in the directory:
c:\Program Files\IBM\WebSphere MQ\tools\c\samples\bin
In WebSphere MQ for UNIX systems, the source of amqsdlq is supplied in the directory:
/opt/mqm/samp/dlq (/usr/mqm/samp/dlq on AIX)
and the compiled version is supplied in the directory:
/opt/mqm/samp/bin (/usr/mqm/samp/bin on AIX)
Problem
Documentation required by the support team for a WebSphere MQ Dead Letter Queue (DLQ) problem on the Windows operating systems. Gathering this information before calling IBM support helps expedite the troubleshooting process and saves you time
Collecting documentation required by the support team
Required documentation:
* Error logs
* Browse of messages on the dead letter queue
* Use the amqsbcg sample program to browse the messages on the DLQ.
Example: amqsbcg MY_DLQ MY_QMGR > amqsbcg.out
+ Where MY_DLQ is the name of your DLQ
+ Where MY_QMGR is the name of your queue manager
Troubleshooting hints and tips
Process to determine why a message is on the DLQ (dead letter queue):
1. Browse the message on the dead letter queue.
2. Locate the dead letter header. The dead letter header starts with the characters '"DLH". Example: 444C 4820 0100 0000 0A01 0000 4D59 2E51 'DLH ........MY.Q'
3. Find the dead letter Reason (the reason the message arrived on the DLQ) in the third word in the dead letter header. In this example the dead letter Reason is: x'0A01 0000'.
4. Perform this step only on Intel processors (Windows, Linux-Intel and OS/2) . On an Intel processor the dead letter reason is in little-endian format (low-order bytes first). Byte swap x'0A01 0000' little-endian, to x'0000 010A' big-endian.
5. Convert hex x'0000 010A' to decimal 266.
6. Use the dead letter reason code to determine why the message was placed on the dead-letter queue. The deal letter reason code is a Reason Code (MQRC_*) ,or a Feedback Code (MQFB_*). Example: MQFB_TM_ERROR 266 X'0000010A'
7. See the dead letter message example (amqsbcg.txt) attached to the bottom on this technote.
Invoking the DLQ handler
Invoke the DLQ handler using the runmqdlq command. You can name the DLQ you want to process and the queue manager you want to use in two ways:
* As parameters to runmqdlq from the command prompt. For example:
runmqdlq ABC1.DEAD.LETTER.QUEUE ABC1.QUEUE.MANAGER
* In the rules table. For example:
INPUTQ(ABC1.DEAD.LETTER.QUEUE) INPUTQM(ABC1.QUEUE.MANAGER)
The above examples apply to the DLQ called ABC1.DEAD.LETTER.QUEUE, owned by the queue manager ABC1.QUEUE.MANAGER.
If you do not specify the DLQ or the queue manager as shown above, the default queue manager for the installation is used along with the DLQ belonging to that queue manager.
The runmqdlq command takes its input from stdin; you associate the rules table with runmqdlq by redirecting stdin from the rules table.
To run the DLQ handler you must be authorized to access both the DLQ itself and any message queues to which messages on the DLQ are forwarded. For the DLQ handler to put messages on queues with the authority of the user ID in the message context, you must also be authorized to assume the identity of other users.
For more information about the runmqdlq command, see runmqdlq (run dead-letter queue handler).
The sample DLQ handler, amqsdlq
In addition to the DLQ handler invoked using the runmqdlq command, WebSphere MQprovides the source of a sample DLQ handler, amqsdlq, whose function is similar to that provided by runmqdlq. You can customize amqsdlq to provide a DLQ handler that meets your requirements. For example, you might decide that you want a DLQ handler that can process messages without dead-letter headers. (Both the default DLQ handler and the sample, amqsdlq, process only those messages on the DLQ that begin with a dead-letter header, MQDLH. Messages that do not begin with an MQDLH are identified as being in error, and remain on the DLQ indefinitely.)
In WebSphere MQ for Windows, the source of amqsdlq is supplied in the directory:
c:\Program Files\IBM\WebSphere MQ\tools\c\samples\dlq
and the compiled version is supplied in the directory:
c:\Program Files\IBM\WebSphere MQ\tools\c\samples\bin
In WebSphere MQ for UNIX systems, the source of amqsdlq is supplied in the directory:
/opt/mqm/samp/dlq (/usr/mqm/samp/dlq on AIX)
and the compiled version is supplied in the directory:
/opt/mqm/samp/bin (/usr/mqm/samp/bin on AIX)
Comments
Post a Comment