Processing the rules table
The DLQ handler searches the rules table for a rule whose pattern matches
a message on the DLQ. The search begins with the first rule in the table,
and continues sequentially through the table. When a rule with a matching
pattern is found, the rules table attempts the action from that rule. The
DLQ handler increments the retry count for a rule by 1 whenever it attempts
to apply that rule. If the first attempt fails, the attempt is repeated until
the count of attempts made matches the number specified on the RETRY keyword.
If all attempts fail, the DLQ handler searches for the next matching rule
in the table.
This process is repeated for subsequent matching rules until an action
is successful. When each matching rule has been attempted the number of times
specified on its RETRY keyword, and all attempts have failed, ACTION (IGNORE)
is assumed. ACTION (IGNORE) is also assumed if no matching rule is found.
Notes:
- Matching rule patterns are sought only for messages on the DLQ that begin
with an MQDLH. If the dead-letter queue handler encounters one or more messages
that are not prefixed by an MQDLH, it issues an information message to report
this. Messages that do not contain an MQDLH are not processed by the DLQ handler
and remain on the dead-letter queue until dealt with by another method.
- All pattern keywords can default, so that a rule can consist of an action
only. Note, however, that action-only rules are applied to all messages on
the queue that have MQDLHs and that have not already been processed in accordance
with other rules in the table.
- The rules table is validated when the DLQ handler starts, and errors flagged
at that time. You can make changes to the rules table at any time, but those
changes do not come into effect until the DLQ handler is restarted.
- The DLQ handler does not alter the content of messages, of the MQDLH,
or of the message descriptor. The DLQ handler always puts messages to other
queues with the message option MQPMO_PASS_ALL_CONTEXT.
- Consecutive syntax errors in the rules table might not be recognized because
the validation of the rules table is designed to eliminate the generation
of repetitive errors.
- The DLQ handler opens the DLQ with the MQOO_INPUT_AS_Q_DEF option.
- Do not run applications that perform MQGET calls against the
queue at the same time as the DLQ handler. This includes multiple instances
of the DLQ handler. There is usually a one-to-one relationship between the
dead-letter queue and the DLQ handler.