1
votes

I am doing some scalability testing for an MSMQ application i built. When sending around 200k messages and trying to receive on the server, I see some of the messages are expiring (using TimeToBeReceived = 30 secs). I use the UseDeadLetterQueue on the message so these messages can be moved to a dead letter queue. Everything is functionally working as expected. But I only see 1000 messages in the deadletter queue even when I see 1000's of messages are expiring on the receiving end.

anybody seen this behavior and if so how do i resolve this?

Updated: I am keeping 2 counters. One while feeding messages into the system (sender) and one while consuming messages from the system. If I feed 200k messages, on the receiving end..i only see about 190k getting consumed. So 10k messages were lost (most probably because of TimeToBeReceived expired). I expect thse 10k messages to show up in DeadLetterQueue. But I only find 1k there. So, i am wondering if there is a limit on how many DeadLetterQueue can hold?

2

2 Answers

4
votes

There is a space quota on the Non-transactional DLQ that is set in the registry (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\MachineCache\MachineDeadletterQuota) and defaults to 250MB.
How big are the messages? 1,000 messages of 250kb each would exceed the default quota.

1
votes

Do you mean to say that your messages should be moved to deadletter queue, if the TimeToBeReceived expires?