Author |
Message
|
ruimadaleno |
Posted: Fri Sep 11, 2015 1:41 am Post subject: Very newbie question about dead queue letter |
|
|
Master
Joined: 08 May 2014 Posts: 274
|
Hi all,
we are running WMB 8.0.0.5 on windows and we found the message bellow in event viewer.
Code: |
( BRKESB01A.eg_batch_01 ) No backout queue or DLQ defined for a message to be backed out; input node 'BPM_ControlMsgCheckAbsence.MQ Input' received from queue ''Q_CheckAbsence''
The input node 'BPM_ControlMsgCheckAbsence.MQ Input' received a message from queue ''Q_CheckAbsence'', but was forced to attempt a backout due to the detection of an internal failure condition associated with it. The message broker has now attempted to propagate the message to the 'backoutRequeueQueueName' or the dead letter queue, but neither of these queues exist. The message is no longer processed by the message flow and continues to be backed out periodically. This situation can cause other messages to build up on the input queue until this message is removed or successfully processed.
Examine previous messages and possibly the message flow to determine why the message is being backed out. Defining either the 'backoutRequeueQueue' or the dead letter queue will cause the message to be propagated to one of those queues.
|
I have read the documentation (ok, not all documentation available) but there are some questions on my mind ...
So there is a message flow that tries to get a message from a queue (q_checkAbsence) but it fails.
The message flow node "bpm_controlmsgcheckabsence.mq input" does not have "backoutRequeueQueueName" configured (i have checked this in code). This node has Failure terminal and catch terminal not connected.
The queue manager does not have "dead letter queue" configured (i have checked this in MQ explorer)
questions:
1) how can i find the root cause of this failure ? somehow the queue q_checkAbsence is not "ready" to deliver messages ? (i can imagine a couple of scenarios where the message is not written to a queue, but it's hard to me to draw a scenario where a message cannot be read)
2) I understand that dead letter queue (DLQ) is important: if a message fails to be written in any queue in the dead queue manager, it is written to the DLQ - we have a central point of management for failures. The same can be applied to read operation ? every read that fails gets a message in the DLQ ?
3) My queue manager has no DLQ configured (this environment was installed by IBM team). Is there any best practice/reason that supports this configuration ? should i request DLQ configuration ?
4) The "backoutRequeueQueueName" property in mq input node another way of defining a DLQ ? If this propery is configured the queue manager DLQ is ignored and the queue configured in this property is used ?
Thanks in advance for your help _________________ Best regards
Rui Madaleno |
|
Back to top |
|
 |
smdavies99 |
Posted: Fri Sep 11, 2015 3:02 am Post subject: Re: Very newbie question about dead queue letter |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
ruimadaleno wrote: |
The queue manager does not have "dead letter queue" configured (i have checked this in MQ explorer)
|
Why? Why isn't this configured?
Quote: |
1) how can i find the root cause of this failure ? somehow the queue q_checkAbsence is not "ready" to deliver messages ? (i can imagine a couple of scenarios where the message is not written to a queue, but it's hard to me to draw a scenario where a message cannot be read)
|
The root cause will be in the original exception that caused the rollback in the first place. Your flow error handling will/should show you this.
Quote: |
2) I understand that dead letter queue (DLQ) is important: if a message fails to be written in any queue in the dead queue manager, it is written to the DLQ - we have a central point of management for failures. The same can be applied to read operation ? every read that fails gets a message in the DLQ ?
|
Not true. There are well documented reasons for a message to appear on the DLQ. Read them.
A message that is on a queue is just that on a queue. If there are read failures then... you have two choices.
1) Leave it there and risk it becoming a poison message.
or
2) Define a Backout Queue at the MQ level so that it can be parked there and other messages can be processed.
There are sound business reasons for both but in general having a BOQ is a good idea.
Quote: |
3) My queue manager has no DLQ configured (this environment was installed by IBM team). Is there any best practice/reason that supports this configuration ? should i request DLQ configuration ?
|
There do seem to be some people in IBM (Global dis-Services) that do this as a default rather than determining the actual business case.
Go back and ask them why they did it.
They should be able to justify it especially if this is not a Production QM. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
Vitor |
Posted: Fri Sep 11, 2015 5:09 am Post subject: Re: Very newbie question about dead queue letter |
|
|
 Grand High Poobah
Joined: 11 Nov 2005 Posts: 26093 Location: Texas, USA
|
ruimadaleno wrote: |
So there is a message flow that tries to get a message from a queue (q_checkAbsence) but it fails. |
Not quite. It successfully reads the message, but the backout count in the MQMD is higher than the backout threshold defined on the queue. WMB does what all well behaved MQ applications should do, and rolls the message back, giving the "poison message" scenario described in the text.
ruimadaleno wrote: |
The message flow node "bpm_controlmsgcheckabsence.mq input" does not have "backoutRequeueQueueName" configured (i have checked this in code). |
I went straight from WMBv7 to IIIBv9 but I've never seen a way to define this in code. It's a queue property.
ruimadaleno wrote: |
The queue manager does not have "dead letter queue" configured (i have checked this in MQ explorer) |
Yikes.
ruimadaleno wrote: |
1) how can i find the root cause of this failure ? |
Look at the previous execution of the flow. That abended, and caused the message to be rolled back onto the queue.
ruimadaleno wrote: |
2) I understand that dead letter queue (DLQ) is important: if a message fails to be written in any queue in the dead queue manager, it is written to the DLQ - we have a central point of management for failures. The same can be applied to read operation ? every read that fails gets a message in the DLQ ? |
The read isn't failing as I explain above - the message is successful but the threshold is too high. While WMB/IIB uses the DLQ if no backout queue is defined, it's much better practice to have a backout queue defined for all local queues as a matter of course. If nothing else, it's much easier to determine which queue the failing message is associated with.
ruimadaleno wrote: |
3) My queue manager has no DLQ configured (this environment was installed by IBM team). Is there any best practice/reason that supports this configuration ? should i request DLQ configuration ? |
All queue managers should have a DLQ. As part of my queue manager creation script, I have:
Code: |
DEFINE QLOCAL(DEAD.LETTER) LIKE (SYSTEM.DEAD.LETTER.QUEUE)
ALTER QMGR DEADQ(DEAD.LETTER)
|
in with the channel authority rules and SVRCONN channels. If IBM defined the queue manager, and didn't just install the software and leave your local admins to build the queue managers, get a refund.
ruimadaleno wrote: |
4) The "backoutRequeueQueueName" property in mq input node another way of defining a DLQ ? If this propery is configured the queue manager DLQ is ignored and the queue configured in this property is used ? |
Again, I've never seen this property in the MQInput node. As I indicate above it's a way of providing a local backout queue for a specific queue instance. It doesn't replace the DLQ but WMB/IIB will use this value in preference to the DLQ if it's defined. Other occasions where the queue manager finds a message undeliverable will not use any local queue and relies on a DLQ being defined to the queue manager. _________________ Honesty is the best policy.
Insanity is the best defence. |
|
Back to top |
|
 |
ruimadaleno |
Posted: Fri Sep 11, 2015 6:18 am Post subject: |
|
|
Master
Joined: 08 May 2014 Posts: 274
|
Vitor and SMDavies, again thank you for you quick and helpful inputs !
Regarding the dead letter queue configuration in all broker environment (including Production) i have questioned our provider (IBM) on this configuration to understand if this is recommended by provider or if this configuration was forgotten in installation (in this case we should demand correction from our provider)
Regarding the dead letter queue and backout queue i assume my knowledge is this subject is weak and i ask for your help and guidance so i can build up this knowledge, besides the manual/knowledge center (i'm searching it) is there any redbook/developerwork/article on this subject ? _________________ Best regards
Rui Madaleno |
|
Back to top |
|
 |
fjb_saper |
Posted: Fri Sep 11, 2015 6:59 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
Do a search on POISON MESSAGE. You might find more about the reason for the backout queue and dead letter queue.  _________________ MQ & Broker admin |
|
Back to top |
|
 |
ruimadaleno |
Posted: Tue Sep 15, 2015 12:54 pm Post subject: |
|
|
Master
Joined: 08 May 2014 Posts: 274
|
ok, done some readings and learned a lot about dead letter queue, backout queue and poison messages
One question in my mind:
Is there any reason to choose not to configure a dead letter queue ?
I can think about a scenario: in a queue manager with no dead queue letter, all messages received for non-existent queues would be "returned" to clients with error. If a dead queue is configured, in a worst case scenario,if a "bad client" sent dozens of messages to a non existent queue (a kind of denial of services attack) , could cause the dead letter queue to flooded with messages.
Am i thinking right ? any more scenarios where not configuring a dead letter queue is a "good choice" ? _________________ Best regards
Rui Madaleno |
|
Back to top |
|
 |
fjb_saper |
Posted: Tue Sep 15, 2015 4:06 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
If you have message affinity and need to force the messages to wait on he sender's xmitq...
But then message affinity is always a bad thing...  _________________ MQ & Broker admin |
|
Back to top |
|
 |
ruimadaleno |
Posted: Wed Sep 16, 2015 1:37 am Post subject: |
|
|
Master
Joined: 08 May 2014 Posts: 274
|
fjb_saper wrote: |
If you have message affinity and need to force the messages to wait on he sender's xmitq...
But then message affinity is always a bad thing...  |
Hi fjb_saper, what do you mean by "message afinity" ? _________________ Best regards
Rui Madaleno |
|
Back to top |
|
 |
smdavies99 |
Posted: Wed Sep 16, 2015 2:36 am Post subject: |
|
|
 Jedi Council
Joined: 10 Feb 2003 Posts: 6076 Location: Somewhere over the Rainbow this side of Never-never land.
|
message affinity is where the order of messages is important.
i.e Message no 123456788 MUST be processed before message number 123456789
If is isn't the whole system will collapse in a heap and the world will end (ok, I made that bit up).
The general concensus around these parts is that message affinity is a bad thing and should be avoided wherever possible. _________________ WMQ User since 1999
MQSI/WBI/WMB/'Thingy' User since 2002
Linux user since 1995
Every time you reinvent the wheel the more square it gets (anon). If in doubt think and investigate before you ask silly questions. |
|
Back to top |
|
 |
|