Итак, у меня есть сервер «А» и сервер «Б». Мы используем SQL Service Broker для выполнения репликации. Наше приложение должно будет записывать данные либо на сервер «A», либо на сервер «B». (один может быть отключен, а другой должен взять на себя)
Данные записываются в базу данных только в рамках хранимых процедур, которые заключаются в транзакцию для обеспечения согласованности данных в таблицах.
Одна из этих транзакций будет включать в себя все сообщения, которые будут отправлены на одноранговый сервер. Итак, в моем коде приложения, когда я пытаюсь зафиксировать транзакцию, он должен записывать все данные в таблицы и отправлять сообщения на одноранговый сервер.
Однако, если одноранговый сервер не работает, сообщения будут ожидать в очереди sys.transmission_queue.
Порядок сообщений в диалоговом диалоге гарантирован, но могу ли я гарантировать, что диалоговые диалоги будут обрабатываться в том порядке, в котором я их создал?
Например, у меня может возникнуть проблема, если сервер «B» не работает, пользователь A записывает данные на сервер «A». После того, как сервер «B» снова заработает, если эти диалоги обрабатываются не по порядку, они могут работать неправильно. (Они могут попытаться вставить данные с неверным внешним ключом или что-то в этом роде).
Я работаю в следующих предположениях:
У меня должен быть один диалог для каждой транзакции.
Решение должно быть реализовано в виде репликации с помощью сервисного брокера SQL. (Это делается в других частях базы данных, поэтому любая причина для использования альтернативной стратегии должна быть убедительной).