Service Broker 라우팅
이 항목에서는 Service Broker가 메시지를 라우팅하는 방법을 자세히 설명합니다. 개요는 경로를 참조하십시오.
대부분의 응용 프로그램의 경우 Service Broker 라우팅 작동 방식이 간단합니다. 서비스가 포함된 각 데이터베이스에서는 서비스와 통신하는 외부 서비스의 경로를 지정합니다. 그러나 Service Broker가 응용 프로그램에 좀 더 복잡한 동작이 필요한 경우를 처리하기 위해 정교한 라우팅 시스템을 제공합니다. 라우팅 과정을 보여 주는 예는 Service Broker 라우팅 예를 참조하십시오.
라우팅 과정 설명
SQL Server는 두 가지 고유 수준의 라우팅 정보를 유지 관리합니다. 각 데이터베이스에는 해당 데이터베이스에서 시작된 대화에 대한 로컬 라우팅 테이블인 sys.routes가 포함됩니다. SQL Server 인스턴스에서 시작되는 대화의 경우 SQL Server는 해당 대화를 만든 데이터베이스에서 라우팅 테이블을 검색합니다. 인스턴스 외부로부터 도착하는 대화의 경우 SQL Server는 msdb.sys.routes를 검색합니다.
대화가 인스턴스 내부에서 시작하든 인스턴스 외부에서 시작하든 관계없이 기본적인 일치 과정은 동일합니다. 만료된 경로는 이 과정에서 무시됩니다. 라우팅 과정은 다음 3가지 고유 단계로 구성됩니다.
일치하는 경로 찾기 - Service Broker는 일치하는 서비스 이름과 Service Broker 식별자를 찾아 가능한 경로 집합을 찾습니다.
경로 선택 - Service Broker가 가능한 경로 집합 중에서 경로를 선택합니다.
대상 서비스 찾기 - 선택한 경로가 네트워크 주소로 **'LOCAL'**을 지정하면 Service Broker는 인스턴스에서 서비스를 찾습니다. 서비스가 인스턴스에 없으면 Service Broker는 2단계로 돌아가서 다른 경로를 선택할 수 있습니다.
일단 메시지가 시작자에서 대상으로 전송되고 시작자가 대상으로부터 승인 메시지를 받으면 시작자는 승인 메시지에 Service Broker 식별자를 사용하여 후속 메시지를 동일한 대상으로 라우팅합니다. Service Broker는 승인 메시지를 처리하며 이 과정은 Service Broker를 사용하는 응용 프로그램에서 인식하지 못합니다. 승인 메시지에 대한 자세한 내용은 Service Broker 통신 프로토콜을 참조하십시오.
대상 서비스로부터의 회신 메시지
인스턴스 외부에서 도착하는 메시지가 대상 서비스로부터 오는 것이면 SQL Server는 현재 인스턴스의 메시지에 Service Broker 식별자가 포함되어 있는지 확인합니다. 포함되어 있는 경우에는 "대상 서비스 찾기" 섹션에 설명된 대로 메시지가 현재 인스턴스에서 배달됩니다. 그렇지 않으면 SQL Server는 표준 일치 과정을 따릅니다.
일치하는 경로 찾기
다음 절차에서는 SQL Server가 일치하는 경로를 찾는 방법에 대해 설명합니다. 각 단계에서 하나 이상의 경로가 일치하면 이 과정이 끝나고 Service Broker는 일치하는 경로 중 하나를 다음과 같이 선택합니다.
대화에서 Service Broker 식별자를 지정하는 경우 서비스 이름과 Service Broker 식별자가 정확하게 일치하는 경로를 찾습니다.
Service Broker 식별자를 지정하지 않은 경로 중에서 서비스 이름과 정확히 일치하는 항목을 찾습니다.
대화에서 Service Broker 식별자를 지정하지 않은 경우 Service Broker 식별자를 지정한 경로 중에서 서비스 이름과 정확히 일치하는 항목을 찾습니다. 라우팅 테이블에 서비스 이름과 일치하지만 Service Broker 식별자는 다른 경로가 있으면 Service Broker 식별자를 임의로 선택합니다. 그런 다음 해당 Service Broker 식별자를 사용하는 경로와 일치하는 경로만 찾습니다.
동적 라우팅 서비스에 대한 경로가 있고 서비스에 대한 경로 요청이 보류된 것이 없으면 대화를 지연된 상태로 표시하고 해당 서비스에서 라우팅 정보를 요청합니다.
서비스 이름이나 Service Broker 식별자를 지정하지 않은 경로를 찾습니다.
대화에서 Service Broker 식별자를 지정하고 인스턴스에 대화에 지정된 이름과 일치하는 이름의 서비스를 포함하는 데이터베이스가 하나 이상 있으면 라우팅 테이블에 해당 서비스 이름과 네트워크 주소 **'LOCAL'**을 사용하는 경로가 있는 것처럼 대화를 라우팅합니다.
대화를 지연됨으로 표시합니다.
대화가 지연됨으로 표시되면 Service Broker는 제한 시간 경과 후 다시 일치 과정을 수행합니다. 일치하는 경로를 찾지 못하는 경우가 오류로 간주되지는 않습니다.
경로 선택
일치 과정에서 일치하는 경로를 두 개 이상 찾으면 Service Broker는 일치하는 경로 중에서 하나의 경로를 선택합니다. 이를 위해 Service Broker 식별자, 서비스 이름 및 네트워크 주소가 같은 경로는 동일한 것으로 간주됩니다. Service Broker는 정확한 경로를 선택하기 위해 다음 절차를 수행합니다. 각 단계에서 해당 단계에 지정된 주소와 일치하는 경로가 없으면 다음 단계를 계속합니다.
미러 주소를 지정하는 경로 중에서 하나의 경로를 선택합니다.
네트워크 주소로 **'LOCAL'**을 지정하는 경로 중에서 하나의 경로를 선택합니다. 대화에 지정된 이름과 일치하는 서비스가 이 SQL Server 인스턴스에 포함되어 있지 않으면 3단계를 계속합니다.
네트워크 주소를 지정하는 경로 중에서 하나의 경로를 선택합니다.
네트워크 주소로 **'TRANSPORT'**를 지정하는 경로 중에서 하나의 경로를 선택합니다.
Broker 전달이 활성화 상태가 아닌 경우 대화가 현재 인스턴스에서 시작되지 않고 선택한 경로의 주소가 **'LOCAL'**이 아니면 Service Broker에서 메시지를 삭제합니다.
대상 서비스 찾기
위에서 설명한 대로 Service Broker는 일치하는 경로가 네트워크 주소로 **'LOCAL'**을 지정하는 경우 현재 인스턴스의 서비스에 메시지를 배달합니다. 인스턴스 외부에서 시작되는 메시지의 경우 경로가 msdb.sys.routes에 있어야 합니다. 인스턴스에서 시작되는 메시지의 경우 일치하는 경로는 대화를 시작하는 데이터베이스의 sys.routes 테이블에 있어야 합니다.
Service Broker가 메시지에 대한 서비스가 현재 인스턴스에 있는 것을 확인하면 Service Broker는 서비스를 해당 인스턴스에서 찾아야 합니다. 대화의 Service Broker 식별자가 대화나 경로에 있으면 Service Broker는 Service Broker 식별자로 식별된 데이터베이스에 메시지를 배달합니다.
그렇지 않으면 Service Broker는 대화가 포함된 데이터베이스에서 서비스 이름을 먼저 검색하여 서비스를 찾습니다. 그런 다음 인스턴스 내의 다른 데이터베이스에서 서비스 이름을 검색합니다. Service Broker는 처음으로 찾은 서비스에 메시지를 배달합니다. 그러나 Service Broker가 인스턴스의 다른 데이터베이스를 검색하는 순서는 지정되지 않으며 대화마다 일관되지 않을 수도 있습니다. 즉, 인스턴스에 대상 서비스의 복사본이 두 개 이상 있을 경우 Service Broker는 대상에 대한 서비스를 임의로 선택합니다.
기타 고려 사항
안정성을 높이기 위해 Service Broker 라우팅에는 라우팅 루프에 대한 보호 기능이 있습니다. Service Broker 라우팅은 데이터베이스 미러링을 인식하며 미러된 데이터베이스가 인식하지 못하는 사이에 해당 데이터베이스의 활성 파트너에 대화를 리디렉션할 수 있습니다.
라우팅 루프
Service Broker 메시지 전달에서는 무한 라우팅 루프를 방지하기 위해 메시지가 전달된 횟수를 추적합니다. 자세한 내용은 Service Broker 메시지 전달을 참조하십시오.
일치하는 경로에 현재 인스턴스로 확인되는 네트워크 주소가 포함되어 있으면 SQL Server는 대화를 인스턴스 외부에서 시작된 것처럼 처리합니다. Service Broker는 msdb.sys.routes의 경로를 사용하여 대화 메시지를 라우팅합니다. 이러한 메시지에 대한 라우팅은 인스턴스 외부의 메시지에 대한 라우팅과 동일합니다. 특히 **'LOCAL'**이 아닌 네트워크 주소로 메시지를 전달하려면 Service Broker에 대해 메시지 전달이 활성화되어 있어야 합니다.
미러 주소
미러 주소가 있는 경로는 일치하는 경로의 초기 집합 중에서 경로를 선택할 때 가장 높은 우선 순위를 갖습니다. 그러나 Service Broker는 대화에 대해 일치하는 경로를 찾을 때 미러 주소를 특별히 고려하지는 않습니다.
Service Broker가 미러 주소를 지정하는 경로를 선택할 경우 해당 경로를 사용하여 이전에 메시지를 배달한 적이 없으면 Service Broker는 두 주소 모두에 요청을 보내 현재 보안 주체인 인스턴스를 확인합니다. Service Broker가 보안 주체를 식별하면 Service Broker는 미러 인스턴스에 연결하지 않고도 해당 경로를 사용하는 모든 메시지를 해당 보안 주체로 보냅니다. 보안 주체가 연결할 수 없는 상태이거나 해당 인스턴스가 더 이상 보안 주체가 아님을 나타낼 경우 다른 주소의 SQL Server 인스턴스가 새 보안 주체임을 나타내면 Service Broker는 이 쌍에 대한 다른 주소로 메시지를 보냅니다.
Service Broker가 보안 주체에 연결할 수 없지만 파트너가 새 보안 주체가 아닐 경우 Service Broker는 해당 파트너에 메시지를 보내지 않습니다. Service Broker는 보안 주체가 연결할 수 있는 상태가 되거나 파트너가 보안 주체가 될 때까지 보안 주체 주소와 파트너 주소를 다시 시도합니다. 이 방법을 통해 Service Broker는 보안 주체와 파트너가 통신할 수는 있지만 메시지를 보내는 인스턴스가 보안 주체에 연결하지 못하는 경우에도 메시지를 안정적으로 배달합니다.