Я поддерживаю приложение на базе SQL Server, которое требует, чтобы мы отправляли уведомления об определенных изменениях базы данных подключенным клиентам. Эти клиенты являются приложениями C ++ для толстых клиентов с высокоскоростным подключением к серверу.
До этого момента мы использовали выделенную таблицу сообщений в SQL Server, которая обновляется с помощью триггеров в соответствующих таблицах. Огромный недостаток этого заключается в том, что если кто-то оставляет транзакцию, которая приводит к открытию вставки сообщения в течение длительных периодов времени, то блокировка этой общей таблицы сообщений приводит к тому, что другие клиенты (и сообщения в целом) останавливаются.
Мы экспериментировали с использованием расширенной хранимой процедуры для прямого подключения к нашим приложениям через сокеты, но это привело к аналогичным проблемам с блокировкой, когда что-то неизбежно пошло не так с подключением.
Что я действительно ищу, так это хороший механизм внутри SQL Server (в идеале SQL Server 2000 и выше, но SQL Server 2008-only также будет в порядке) для запуска какого-либо сообщения. Сообщение должно:
- Быть доступным для чтения произвольной клиентской программой из транзакции базы данных,
- Не добавляет дополнительной нагрузки на блокировку базы данных, а
- Будь быстрым.
Постоянство / гарантированная доставка была бы очень хорошей, но не абсолютно необходимой.
Я смотрел на MSMQ , но я не до конца понимаю документацию. Я понимаю, что в MSMQ существует такая вещь, как «транзакция сообщения», и что возможно отключить сообщения от расширенной хранимой процедуры или процедуры CLR, но насколько пуленепробиваемой и быстрой она является в этом контекст?
Любой совет, который вы можете дать, будет очень признателен.
Редактировать: Чтобы уточнить, мне нужен способ отправить хотя бы одно приложение, кроме вызывающего приложения. Это требование уведомления / трансляции, поэтому приведенное ниже предложение RAISERROR не подходит.