Да, это возможно при некоторых обстоятельствах.
Отравляющее сообщение - это сообщение, которое остается в очереди, не позволяя другим проходить. Теперь, что делает транзакционные сообщения отравленными? Это когда мы откатываем транзакцию и сообщение возвращается туда, где оно было раньше, прямо в верхней части очереди. Поэтому речь идет не о самом сообщении (по крайней мере, непосредственно), а о том, как мы обрабатываем сообщения и что мы делаем в случае сбоя при обработке, т. Е. Выполняем откат.
Если очередь не транзакционная, и мы «получаем» сообщение из верхней части очереди, оно необратимо. Там нет отката, который вернул бы сообщение на эту верхнюю позицию. Если мы хотим поместить это сообщение обратно в очередь для повторной попытки позже, все, что мы можем сделать, это отправить копию исходного сообщения. И MSMQ Send помещает его в конец очереди. Поэтому он не может блокировать другие сообщения.
Есть один случай, когда это не применимо, и это если мы играем с приоритетом сообщения и отправляем его обратно с более высоким приоритетом, чем остальная часть очереди. Это бы вернуло его на вершину и создало сценарий ядовитых сообщений.
Другой способ, если наша обработка состоит из «Peek» (который не удаляет сообщение), а затем «Receive», если обработка в порядке. В случае сбоя обработки между Peek и Receive сообщение останется в верхней части очереди.
Так что, да, возможно иметь вредоносные сообщения с нетранзакционными сообщениями, но только если делать что-то определенным образом.