Использование SQL Server Service Broker с несколькими маршрутами

#sql-server #service-broker

#sql-сервер #service-broker

Вопрос:

При использовании SQL Server Service Broker — если бы у меня была настроена служба с двумя маршрутами, и я выполнил BEGIN DIALOG инструкцию без указания желаемого целевого экземпляра брокера, какой из возможных адресатов он выбрал бы в качестве адресата для сообщения?

Я понимаю, BEGIN DIALOG что могу явно настроить таргетинг на определенного брокера, но это необязательно. Что бы произошло без него? Будет ли сообщение отправлено на оба маршрута?

Комментарии:

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

Ответ №1:

Я не могу найти подтверждающую документацию прямо сейчас, но моя память говорит, что он выберет один из маршрутов произвольно. Это было задумано как средство балансировки нагрузки между n базами данных, которые предоставляют одинаковые возможности обработки, и вам, как отправителю сообщения, все равно, какая из них на самом деле выполняет обработку.

Комментарии:

1. Правильно. Поскольку повторные попытки должны идти по одному и тому же маршруту, выбор не является полностью произвольным. Он основан на хэше идентификатора разговора, используемого в качестве индекса в массиве возможных маршрутов.

2. @remus — да. Маршрутизация выполняется только для нового диалога. Если вы уже установили диалог с одной конкретной базой данных, вы продолжите взаимодействовать с ней. Конечно, это для назидания OP, а не для вас (учитывая, что вы написали SB)!