2013-09-03 3 views
1

Как я понимаю, разговор будет проводиться для одного сеанса.Беседы в Sql Server Service Broker

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

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

Сессия, которая получила первые сообщения, выполнена/ушла/не более. Что сделает Service Broker с другими сообщениями? Устраивают ли они время, а затем переходят на другую сессию?

Ожидает ли окончательный разговор сеанса, который имеет первые сообщения? (Если нет, как он гарантирует правильный порядок?)

Или (в худшем случае) эти сообщения никогда не обрабатывались?

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

ответ

2

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

В приемной части процессор должен продолжать поиск сообщений до тех пор, пока не увидит сообщение EndDialog - как только он увидит, что он может закрыть разговор в конце, так как он знает, что больше не может быть сообщений для этого разговора.

+0

Как насчет сценария, когда часть сообщений в цепочке была оттянута, тогда этот сеанс никогда не будет проверять обратно. Останутся ли остальные сообщения в этом сеансе для других процессов для захвата? Как это контролируется (есть ли тайм-аут)? – Vaccano

+0

Это зависит от того, как настроена ваша активация. Если вы используете внутреннюю активацию - если SSSB видит сообщения в очереди, которые не были обработаны (и не являются частью заблокированной группы разговора), тогда она будет разворачивать экземпляр процедуры чтения очереди (с учетом ограничения MAX_QUEUE_READER). – Rikalous

Смежные вопросы