Пересылка сообщений компонентом Service Broker
Благодаря функции пересылки сообщений компонентом Service Broker, экземпляр SQL Server может принимать поступающие извне сообщения и отправлять их другим экземплярам.
Пересылка сообщений позволяет администратору:
Обеспечить связь серверов, относящихся к разным доменам доверия.
Упростить администрирование за счет создания единственного централизованного экземпляра СУБД, хранящего все сведения о маршрутизации сообщений в домене.
Распределить работу между несколькими экземплярами SQL Server.
Когда пересылка включена, необходимость пересылки сообщения, поступившего от другого экземпляра SQL Server, определяется по таблице маршрутизации из файла msdb.sys.routes. Если значение адреса соответствующего маршрута отлично от LOCAL, SQL Server пересылает сообщение по указанному адресу. В противном случае сообщение обрабатывается локальным экземпляром.
Каждое сообщение компонента Service Broker содержит значение, определяющее максимальный срок существования сообщения, и число уже выполненных его пересылок. Когда экземпляр SQL Server пересылает сообщение, он увеличивает это число. Если длительность существования сообщения превышает максимальный срок, экземпляр SQL Server, выполняющий пересылку, отбрасывает сообщение. Эта стратегия помогает предотвращать проблемы в тех ситуациях, когда возможна петля маршрутизации.
Надежность доставки пересылаемых сообщений
Экземпляр SQL Server, пересылающий сообщение, не предоставляет отправителю подтверждение того, что сообщение доставлено. Доставку сообщения подтверждает только окончательный адресат. Если отправитель не получает от адресата подтверждение в течение определенного периода времени, он отправляет сообщение повторно.
Экземпляру SQL Server, пересылающему сообщения, не нужно хранить их на диске. Вместо этого он хранит подлежащие пересылке сообщения в памяти. Объем памяти, выделяемой на хранение пересылаемых сообщений, указывается во время конфигурирования конечной точки компонента Service Broker. Эта стратегия обеспечивает высокую эффективность пересылки сообщений без хранения данных об их состоянии. Если экземпляр SQL Server, пересылающий сообщения, выходит из строя, сообщения не утрачиваются. Каждое сообщение хранится отправителем до тех пор, пока окончательный адресат не подтвердит получение сообщения. Подробно это описано в разделе Протоколы обмена данными компонента Service Broker.
Представление управления sys.dm_broker_forwarded_messages содержит сведения о сообщениях, которые в настоящий момент пересылаются экземпляром SQL Server. Экземпляр SQL Server, пересылающий сообщения, не сохраняет их на диске, то есть они находятся только в памяти. В то время как экземпляры, отправляющие и принимающие сообщения, сохраняют их на диске. Экземпляр SQL Server, отправивший сообщение, не удаляет его, пока экземпляр-получатель не подтвердит его получение.
Безопасность пересылки сообщений
Функция пересылки сообщений компонента Service Broker не требует, чтобы экземпляр SQL Server, пересылающий сообщения, выполнял их дешифрование. Таким образом, механизм обеспечения безопасности диалогов необходимо сконфигурировать только для баз данных, участвующих в диалоге.
В то же время соединения экземпляров SQL Server защищает механизм обеспечения безопасности транспорта, поэтому на каждом экземпляре SQL Server он должен быть правильно сконфигурирован для экземпляров, с которыми этот экземпляр непосредственно взаимодействует. Например, если экземпляры A и B взаимодействуют через экземпляр C, пересылающий сообщения, то на экземплярах A и B механизм обеспечения безопасности транспорта должен быть правильно сконфигурирован для взаимодействия с экземпляром C. Так как экземпляры A и B не обмениваются сообщениями напрямую, конфигурировать для них механизм обеспечения безопасности транспорта не нужно.
См. также