Что происходит, когда вы завершаете сообщение Sql Server Service Broker с ошибкой?

Я пытаюсь понять, как бороться с ошибками с помощью Sql Server Service Broker.

Я читал, что в служебной шине нет реального элемента управления «ядовитыми сообщениями», кроме как просто остановить обработку.

Для моей системы это было бы очень плохо (мы сильно отставали бы от сообщений).

Я видел пример, в котором говорится, что он справляется с этим, используя end conversation with error <error code>

Но я не могу понять, что это на самом деле делает в очередях или где записывается ошибка.

Если кто-нибудь знает, что делает вызов «с ошибкой» в конце разговора, я хотел бы это услышать.


person Vaccano    schedule 03.09.2013    source источник


Ответы (1)


Он помещает в очередь сообщение об ошибке, а не сообщение EndDialog. В онлайн-книгах говорится: «Service Broker отбрасывает любые другие сообщения для этого диалога, которые в настоящее время находятся в очереди передачи». что, как я понимаю, означает, что это сообщение заменяет любые сообщения, которые еще не были отправлены.

Номер ошибки и сообщение помещаются в тело сообщения.

person Rikalous    schedule 04.09.2013
comment
В частности, сообщение, отправленное обратно инициатору, имеет тип сообщения http://schemas.microsoft.com/SQL/ServiceBroker/Error. - person JNK; 04.09.2013
comment
отбрасывает любые другие сообщения для этого разговора, которые в настоящее время находятся в очереди передачи: вы должны учитывать, что всегда есть две очереди, ваша и удаленная. Когда вы запускаете диалоговое окно End (с ошибкой или без нее), любое ожидающее сообщение в вашей очереди удаляется. Другими словами, после того, как вы выдали End Dialog, вы гарантированно никогда не получите никакого сообщения в этом диалоговом окне, поэтому состояние приложения, относящееся к этому диалоговому окну, можно безопасно стереть. - person Remus Rusanu; 05.09.2013