0

Как целевое приложение получит сообщения, отправляемые ему, пока оно не реагирует, останавливается и перезапускается? Будут ли они автоматически отправляться, когда они вернутся в сети?С помощью сервис-брокера sql, что произойдет, если целевое приложение выйдет из строя?

Как бы вы реализовали это с помощью EF и C#? Где учебные пособия!

+0

http://technet.microsoft.com/en-us/library/bb522893(v=sql.105).aspx –

ответ

1

Сервисный брокер отправляет с SQL Server на SQL Server. Используемый протокол полностью устойчив к сбоям, сообщения остаются в sys.transmission_queue отправителя до тех пор, пока они не будут подтверждены целевым объектом, и цель только подтвердит их после их передачи в очередь назначения. SQL Server также обрабатывает все, что связано с временными сбоями: невосприимчивым адресатом, сетевым разделением, обслуживанием/исправлением сбоев. Все это обрабатывается самим SQL Server, так как он гарантирует доставку сразу после заказа.

Теперь, что произойдет, если ваш приложение сбой, т.е. при обработке инструкции RECEIVE, очень просто: вы взаимодействуете с Service Broker через T-SQL в контексте транзакции базы данных. Если приложение выходит из строя, происходит обычное поведение транзакций базы данных ACID: поскольку транзакция не была выполнена, она будет откатна, и приложение будет иметь возможность обработать сообщение снова после перезапуска.

Итак, с точки зрения приложения вы взаимодействуете только с базой данных, очередями и таблицами и всеми в контексте транзакции базы данных. Ваши вопросы такие же, как «что происходит с INSERT, если приложение выходит из строя?»

+0

Спасибо за объяснение, где приведены некоторые примеры кода в C# о том, как реализовать это, предпочтительно используя структура сущностей? – lymber

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