Назад | Перейти на главную страницу

Восстановление ошибочного сообщения от SQL Server Service Broker

Мы использовали SSSB 2008 в течение прошлого года, и это было замечательно. (Ну, в любом случае, по сравнению с MSMQ.) Однако мы использовали только организацию очереди в той же базе данных, а не функции маршрутизации.

Некоторые изменения в нашем приложении теперь требуют маршрутизации сообщений. До сих пор мы использовали «выстрелил и забыл» - ОТПРАВИТЬ сообщение и завершите беседу. Меня беспокоит не столько сбой принимающего приложения, сколько неправильная настройка одной из баз данных. Если кто-то испортит сертификаты, мы получим сообщение об ошибке от SSSB.

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

Если это так, как обычно с этим бороться? Я подумываю записать сообщение и идентификатор в таблицу «QueuedMessages», а затем активировать процедуру в очереди отправки для удаления сообщения при получении EndDialog или установки флага / ведения журнала при получении ошибки. В качестве альтернативы, если я могу ослабить бизнес-требования, я мог бы просто сохранить отправляемые элементы в ОЗУ отправляющего процесса и заставить его проверять очередь на наличие ошибки / EndDialog. (Мотивом для использования в оперативной памяти будет производительность - мы планируем делать исходящие сообщения примерно 400 сообщений в секунду с очень небольшими ресурсами, используя SQL Express.)

Есть комментарии в целом?

Если сообщение не доходит до места назначения, вы сможете получить его из sys.transmission_queue.