SqlNotificationRequest를 사용하여 쿼리 알림 구독
SqlNotificationRequest를 사용하여 쿼리 알림을 구독할 경우 기본 Service Broker 개체를 준비해야 응용 프로그램이 알림을 요청할 수 있습니다. 구독을 요청하면 응용 프로그램에서 알림 메시지의 큐를 모니터링하고 메시지가 도착할 때 적절하게 반응합니다.
SQL Server에서는 Service Broker를 사용하여 쿼리 알림을 배달합니다. 쿼리 알림 메시지의 메시지 유형 이름은 https://schemas.microsoft.com/SQL/Notifications/QueryNotification
입니다. Service Broker에서는 이 메시지 유형의 유효성을 VALID_XML WITH SCHEMA COLLECTION으로 검사합니다. SqlNotificationRequest로 만든 구독의 경우 응용 프로그램이 큐를 모니터링하고 알림 메시지를 처리합니다. 따라서 SqlNotificationRequest를 사용하려면 외부 응용 프로그램을 구현해야 합니다. 이 항목에서는 SqlNotificationRequest를 사용하여 쿼리 알림을 구독하는 데 필요한 구체적인 단계에 대해 설명합니다. 응용 프로그램을 만들어 쿼리 알림 메시지를 처리하는 방법은 Introduction to Service Broker Programming을 참조하십시오.
SqlNotificationRequest는 알림 메시지를 수신할 서비스를 지정해야 합니다. 서비스를 만들려면 서비스에서 사용할 큐를 만든 다음 서비스를 만들어야 합니다. 로컬 데이터베이스에 서비스에 대한 경로도 만들어야 합니다.
데이터베이스 엔진은 사용자가 만드는 서비스가 이 계약을 따르는 대화를 수락하도록 https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification
계약을 사용하여 알림 메시지를 보냅니다. 다음 예에서는 WebCacheMessages 큐를 사용하는 WebCacheNotifications 서비스를 만든 다음 로컬 데이터베이스에 WebCacheNotifications 서비스에 대한 경로를 만듭니다.
USE AdventureWorks ;
CREATE QUEUE WebSiteCacheMessages ;
CREATE SERVICE WebCacheNotifications
ON QUEUE WebSiteCacheMessages
([https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]) ;
CREATE ROUTE
WebCacheMessagesRoute
WITH SERVICE_NAME = 'WebCacheNotifications',
ADDRESS = 'LOCAL' ;
https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification
계약에서는 대화 시작자가 https://schemas.microsoft.com/SQL/Notifications/QueryNotification
유형의 메시지를 보낼 수 있음을 지정합니다.
SqlNotificationRequest 개체에 있는 서비스 이름은 Service Broker 서비스 이름입니다. 알림은 Service Broker 메시지로 생성됩니다.
알림 요청에는 요청에 대한 메시지 문자열이 있어야 합니다. 데이터베이스 엔진에서 이 요청에 대한 알림을 만들 때 알림 메시지에 이 메시지 문자열이 포함됩니다. 알림 메시지는 XML 문서입니다. 이 문서에는 알림 요청에 포함된 메시지 문자열이 들어 있는 Message 요소가 포함됩니다. 응용 프로그램은 메시지 문자열을 사용하여 알림에 해당하는 쿼리를 식별합니다.
쿼리와 메시지 조합을 사용하여 알림 구독을 관리합니다. 응용 프로그램이 같은 메시지와 같은 쿼리를 사용하여 다른 알림을 요청하는 경우 데이터베이스 엔진은 새 구독을 만드는 대신 알림 구독을 업데이트합니다. 메시지에는 어떠한 문자열도 가능합니다. 그러나 데이터베이스 엔진은 두 메시지가 같은지 여부를 확인합니다. 따라서 사용 중인 프로그램에서 일치 여부를 비교하지 않도록 데이터베이스 문자열에 대해 설정된 옵션은 데이터베이스에서 일치하는 것으로 간주될 수 있습니다. 예를 들어 데이터베이스 엔진에서는 후행 공백 수만 다른 문자열을 동일한 문자열로 간주합니다.
다음 예제에서는 SqlNotificationRequest를 사용하여 알림 구독을 만드는 간단한 프로그램을 보여 줍니다.
[Visual Basic]
Option Strict On
Imports System
Imports System.Data
Imports System.Data.Sql
Imports System.Data.SqlClient
Namespace Microsoft.Samples.SqlServer
Module NotificationSampleMain
Public Sub Main()
Try
' Connect to the AdventureWorks database in the default instance
' on this server, using integrated security. If you change this
' connection string, be sure to change the service string below.
Using connection As SqlConnection = _
new SqlConnection("database=AdventureWorks;server=.;" + _
"Integrated Security=SSPI")
connection.Open()
' Define the service to receive the notifications. Update this
' information if you change the connection string.
Dim service As String = _
"WebCacheNotifications"
Dim query As String = _
"SELECT prod.Name, prod.Class, " + _
" prod.ProductNumber " + _
"FROM Production.Product as prod " + _
"WHERE prod.Color = 'Black' "
Dim command As SqlCommand = connection.CreateCommand()
command.CommandText = query
command.Notification = _
new SqlNotificationRequest(Guid.NewGuid().ToString(), _
service, _
Int32.MaxValue)
Dim reader As SqlDataReader = command.ExecuteReader()
' Normally, an application would process the results here.
MsgBox("Registered the notification.")
' Notice that the connection dispose method also
' disposes the commands and readers created from the
' connection.
End Using ' Using connection
' For sample purposes, simply display all exceptions and exit.
Catch e As SqlException
MsgBox("SqlException: " + e.Message + vbCrLf _
+ e.StackTrace )
Catch e As Exception
MsgBox("Exception: " + e.Message + vbCrLf _
+ e.StackTrace )
End Try
End Sub ' Main
End Module 'NotificationSampleMain
End Namespace ' Microsoft.Samples.SqlServer
이 코드가 실행되면 SQL Server에 쿼리 알림 구독이 포함됩니다. 다음 쿼리에 지정된 데이터가 변경될 경우 구독이 알림을 생성합니다.
SELECT prod.Name, prod.Class, prod.ProductNumber
FROM Products.Product as prod
WHERE prod.Color = 'Black'
Service Broker는 WebCacheNotifications 서비스에 알림 메시지를 배달합니다. 이 서비스는 WebCacheMessages 큐를 사용하므로 알림 메시지가 해당 큐에 나타납니다. 알림 메시지를 처리하기 위해 응용 프로그램은 WebCacheMessages 큐를 모니터링합니다.
참고 항목
개념
알림 수신
SqlDependency를 사용하여 쿼리 알림 구독
관련 자료
Introduction to Service Broker Programming
Service Broker 라우팅