Poison messages task
Poison messages are message that can’t be processed, and block your application from processing other messages from a queue. When QueueMonitor detects such messages it can move them somewhere else, to be checked manually later from QueueExplorer, and raise appropriate alert. For more about poison messages, read this article:
This task periodically monitors your queues for poison messages.
Detection settings
Configure how and when message is declared as poisonous.
Message is declared poisonous after (h:mm:ss) interval
Specify how long it takes QueueMonitor to declare that message is poisonous. This setting is a trade-off and depends on your usage scenario. If you put this interval too high, poison messages will stay longer in queue, blocking good messages. On positive side, it will allow more time for any temporary issue to go away - in case problem was not with message itself but elsewhere. On the other hand, if you configure this interval to be short, bad messages will be quickly put away but they will also be moved away even if processing had some temporary problem and messages could be successfully processed if they were left a bit longer in a queue.
Check interval
QueueMonitor has to check one or more top messages from a queue for this task to work. Increasing this interval reduces load on MSMQ but increases minimal delay before alert is raised.
How to check messages
QueueMonitor supports two different detection algorithms.
Check if top message stays for too long
Only top message is checked. It’s compared with top message from previous checks. If it stays on top of queue for too long, it’s declared poisonous. Each following message starts time count from zero.
Use ArrivedTime property on all messages
Message’s ArrivedTime property is used to check if message is too old. Multiple messages could be declared poisonous within single check, even if they were just waiting in a queue because first message was blocked.