활성화 발생 시점 이해
Service Broker 활성화 프로세스는 두 단계로 구성됩니다. 첫 번째 단계에서는 Service Broker에서 활성화가 필요한지 여부를 확인합니다. 두 번째 단계에서는 Service Broker에서 활성화를 수행할지 여부를 결정합니다. 정확한 프로세스는 내부 활성화와 외부 활성화의 경우에 각각 다르지만 관련된 전반적인 개념은 어느 전략에서나 동일합니다.
활성화가 필요한지 여부 확인
새 큐 판독기에 수행해야 하는 유용한 작업이 있을 때마다 활성화가 필요합니다. 큐 모니터에서는 활성화가 필요한지 여부를 확인하고, Service Broker에서는 활성화 상태가 ON으로 설정되거나 QUEUE_ACTIVATION 이벤트 알림이 등록된 각 큐에 대해 큐 모니터를 만듭니다. 동적 관리 뷰인 sys.dm_broker_queue_monitors(Transact-SQL)는 인스턴스에서 활성 상태인 큐 모니터를 나열합니다. 각 큐 모니터는 다음 사항을 추적합니다.
큐에 받을 준비가 된 메시지가 들어 있는지 여부
마지막으로 큐에 대한 RECEIVE 문에서 빈 결과 집합이 반환된 후 경과한 기간
현재 큐에 대해 실행 중인 활성화 저장 프로시저의 수
큐 모니터에서는 몇 초마다, 또한 다음 이벤트 중 하나 이상이 발생할 때마다 활성화가 필요한지 여부를 확인합니다.
새 메시지가 큐에 도착함
SQL Server에서 큐에 대해 RECEIVE 문을 실행함
RECEIVE 문을 포함하는 트랜잭션이 롤백됨
큐 모니터에서 시작된 모든 저장 프로시저가 종료됨
SQL Server에서 큐에 대해 ALTER 문을 실행함
활성화는 다음과 같은 경우에 필요합니다.
읽지 않은 메시지가 없는 큐에 새 메시지가 도착하고 큐에 대해 실행 중인 활성화 저장 프로시저가 없는 경우
큐에 읽지 않은 메시지가 들어 있고, GET CONVERSATION GROUP 문이나 WHERE 절을 사용하지 않는 RECEIVE 문에서 대기 중인 세션이 없으며, GET CONVERSATION GROUP 문이나 WHERE 절을 사용하지 않는 RECEIVE 문에서 몇 초 동안 빈 결과 집합을 반환한 적이 없는 경우. 즉, 활성화된 프로시저에서 메시지를 읽는 속도가 충분히 빠르지 않아 큐에 메시지가 누적되고 있는 경우
실제로 큐 모니터에서는 이 프로시저를 통해 큐를 처리하고 있는 큐 판독기의 수가 들어오는 메시지 트래픽에 적절한 수준인지 여부를 확인할 수 있습니다. 이 방법을 사용하려면 대화 그룹을 잠그는 것이 좋습니다. 한 번에 하나의 큐 판독기에서만 대화의 메시지를 처리할 수 있으므로 큐에 있는 읽지 않은 메시지 수와 같이 보다 간단한 항목에 대한 응답으로 큐 판독기를 실행하면 리소스가 낭비될 수 있습니다. 대신 Service Broker 활성화에서는 새 큐 판독기에 수행해야 하는 유용한 작업이 있는지 여부를 고려합니다.
예를 들어 큐에는 단일 대화에 대한 많은 양의 메시지가 처리되지 않은 채 들어 있을 수 있습니다. 이 경우 하나의 큐 판독기에서만 메시지를 처리할 수 있는데 큐 모니터에서 다른 큐 판독기를 활성화하면 모든 메시지가 단일 대화에 속해 있기 때문에 두 번째 큐 판독기는 RECEIVE 문에서 대기하게 됩니다. 큐의 모든 메시지가 동일한 대화에 속해 있고 두 번째 큐 판독기가 계속 실행 중이면 큐 모니터에서는 다른 큐 판독기를 시작하지 않습니다.
활성화를 수행할지 여부 결정
Service Broker에서 활성화가 필요한지 확인한 후 Service Broker에서는 활성화를 수행할지 여부를 결정해야 합니다.
내부 활성화의 경우 큐 모니터에서는 실행 중인 프로그램의 수가 큐에 설정된 MAX_QUEUE_READERS 값보다 작을 때 활성화 저장 프로시저의 새 인스턴스를 활성화합니다. 실행 중인 프로그램의 수가 MAX_QUEUE_READERS 값보다 크거나 같으면 큐 모니터에서는 저장 프로시저의 새 인스턴스를 시작하지 않습니다. 관리 뷰인 sys.dm_broker_activated_tasks(Transact-SQL)에는 Service Broker에서 시작한 저장 프로시저에 대한 정보가 들어 있습니다.
외부 응용 프로그램의 경우 Service Broker에는 큐에 대한 작업을 수행하고 있는 큐 판독기의 수에 대한 정보가 없습니다. 또한 활성화 이벤트가 발생한 시간과 판독기에서 큐를 읽기 시작하는 시간 사이에는 약간의 시작 시간이 필요할 수 있습니다. 따라서 Service Broker에서는 외부 응용 프로그램에 응답 제한 시간을 적용합니다. 제한 시간 동안에는 Service Broker에서 다른 알림을 생성하지 않습니다. 응용 프로그램이 큐에 대해 RECEIVE를 호출하거나 제한 시간이 만료된 후 활성화가 필요하면 Service Broker에서는 다른 이벤트 알림을 만듭니다. 외부 응용 프로그램에서는 프로그램이 실행되는 동안 이벤트 알림을 모니터링하여 이벤트를 읽기 위한 추가 큐 판독기가 필요한지 여부를 확인합니다.