ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Very newbie question about dead queue letter

Post new topic  Reply to topic
 Very newbie question about dead queue letter « View previous topic :: View next topic » 
Author Message
ruimadaleno
PostPosted: Fri Sep 11, 2015 1:41 am    Post subject: Very newbie question about dead queue letter Reply with quote

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
View user's profile Send private message
smdavies99
PostPosted: Fri Sep 11, 2015 3:02 am    Post subject: Re: Very newbie question about dead queue letter Reply with quote

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
View user's profile Send private message
Vitor
PostPosted: Fri Sep 11, 2015 5:09 am    Post subject: Re: Very newbie question about dead queue letter Reply with quote

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
View user's profile Send private message
ruimadaleno
PostPosted: Fri Sep 11, 2015 6:18 am    Post subject: Reply with quote

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
View user's profile Send private message
fjb_saper
PostPosted: Fri Sep 11, 2015 6:59 am    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
ruimadaleno
PostPosted: Tue Sep 15, 2015 12:54 pm    Post subject: Reply with quote

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
View user's profile Send private message
fjb_saper
PostPosted: Tue Sep 15, 2015 4:06 pm    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
ruimadaleno
PostPosted: Wed Sep 16, 2015 1:37 am    Post subject: Reply with quote

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
View user's profile Send private message
smdavies99
PostPosted: Wed Sep 16, 2015 2:36 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » WebSphere Message Broker (ACE) Support » Very newbie question about dead queue letter
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.