다음을 통해 공유


활성화 발생 시점 이해

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에서는 다른 이벤트 알림을 만듭니다. 외부 응용 프로그램에서는 프로그램이 실행되는 동안 이벤트 알림을 모니터링하여 이벤트를 읽기 위한 추가 큐 판독기가 필요한지 여부를 확인합니다.