Service Broker 라우팅

적용 대상:SQL ServerAzure SQL Managed Instance

이 항목에서는 Service Broker가 메시지를 라우팅하는 방법을 자세히 설명합니다. 개요는 경로를 참조하세요.

대부분의 애플리케이션에서는 Service Broker 라우팅에 대한 간단한 접근 방식을 사용할 수 있습니다. 서비스를 포함하는 각 데이터베이스에서 서비스가 통신하는 외부 서비스에 대한 경로를 지정합니다. 그러나 Service Broker가 애플리케이션에 더 복잡한 동작이 필요한 경우를 처리하기 위해 정교한 라우팅 시스템을 제공합니다. 라우팅 프로세스를 보여 주는 예제는 Service Broker 라우팅 예제를 참조하세요.

라우팅 프로세스 설명

SQL Server는 두 가지 고유한 수준의 라우팅 정보를 유지 관리합니다. 각 데이터베이스에는 해당 데이터베이스에서 시작된 대화에 대한 로컬 라우팅 테이블인 sys.routes가 포함됩니다. SQL Server 인스턴스에서 시작되는 대화의 경우 SQL Server는 해당 대화를 만든 데이터베이스에서 라우팅 테이블을 검색합니다. 인스턴스 외부에서 도착하는 대화의 경우 SQL Server는 msdb.sys.routes를 검색합니다.

기본 일치 프로세스는 대화가 인스턴스에서 발생하든 인스턴스 외부에서 발생하든 동일합니다. 이 프로세스는 만료된 경로를 무시합니다. 라우팅 프로세스는 다음과 같은 세 가지 개별 단계로 구성됩니다.

  1. 일치하는 경로 찾기. Service Broker는 서비스 이름과 Service Broker 식별자를 일치시켜 가능한 경로 세트를 찾습니다.

  2. 경로 선택. Service Broker는 가능한 경로 세트 중에서 경로를 선택합니다.

  3. 대상 서비스 찾기. 선택한 경로가 네트워크 주소로 ‘LOCAL’을 지정하면 Service Broker는 인스턴스에서 서비스를 찾습니다. 서비스가 인스턴스에 없으면 Service Broker는 2단계로 돌아가서 다른 경로를 선택할 수 있습니다.

일단 메시지가 초기자에서 대상으로 전송되고 초기자가 대상으로부터 승인 메시지를 받으면 초기자는 승인 메시지에서 Service Broker 식별자를 사용하여 후속 메시지를 동일한 대상으로 라우팅합니다. Service Broker는 승인 메시지를 처리하며 이 프로세스는 Service Broker를 사용하는 애플리케이션에 투명합니다. 승인 메시지에 관한 자세한 내용은 Service Broker 통신 프로토콜을 참조하세요.

대상 서비스의 회신 메시지

인스턴스 외부에서 도착하는 메시지가 대상 서비스에서 오는 것이면 SQL Server는 현재 인스턴스의 메시지에 Service Broker 식별자가 포함되어 있는지 확인합니다. 포함되어 있는 경우에는 “대상 서비스 찾기” 섹션에 설명된 대로 메시지가 현재 인스턴스에서 배달됩니다. 그렇지 않으면 SQL Server는 표준 일치 프로세스를 따릅니다.

일치하는 경로 찾기

다음 절차에서는 SQL Server가 일치하는 경로를 찾는 방법을 설명합니다. 각 단계에서 하나 이상의 경로가 일치하면 이 과정이 끝나고 Service Broker는 일치하는 경로 중 하나를 다음과 같이 선택합니다.

  1. 대화에서 Service Broker 식별자를 지정하는 경우 서비스 이름과 Service Broker 식별자가 정확하게 일치하는 경로를 찾습니다.

  2. Service Broker 식별자를 지정하지 않은 경로 중에서 서비스 이름과 정확히 일치하는 항목을 찾습니다.

  3. 대화에서 Service Broker 식별자를 지정하지 않은 경우 Service Broker 식별자를 지정한 경로 중에서 서비스 이름과 정확히 일치하는 항목을 찾습니다. 라우팅 테이블에 서비스 이름과 일치하지만 Service Broker 식별자는 다른 경로가 있으면 Service Broker 식별자를 임의로 선택합니다. 그런 다음, 해당 Service Broker 식별자를 사용하는 경로와 일치하는 경로만 찾습니다.

  4. 동적 라우팅 서비스에 대한 경로가 있고 서비스 경로에 대한 요청이 보류 중인 경우 대화가 지연되었음을 표시하고 해당 서비스에서 라우팅 정보를 요청합니다

  5. 서비스 이름이나 Service Broker 식별자를 지정하지 않은 경로를 찾습니다.

  6. 대화에서 Service Broker 식별자를 지정하고 인스턴스에 대화에 지정된 이름과 일치하는 이름의 서비스를 포함하는 데이터베이스가 하나 이상 있으면 라우팅 테이블에 해당 서비스 이름과 네트워크 주소 ‘LOCAL’을 사용하는 경로가 있는 것처럼 대화를 라우팅합니다.

  7. 대화가 지연되었음을 표시합니다.

대화가 지연됨으로 표시되면 Service Broker는 제한 시간 경과 후 다시 일치 프로세스를 수행합니다. 일치하는 경로를 찾지 못한 경우 오류로 간주되지 않습니다.

경로 선택

일치 프로세스에서 일치하는 경로를 두 개 이상 찾으면 Service Broker는 일치하는 경로 중에서 하나의 경로를 선택합니다. 이를 위해 Service Broker 식별자, 서비스 이름 및 네트워크 주소가 같은 경로는 동일한 것으로 간주됩니다. Service Broker는 다음 절차를 사용하여 정확한 경로를 선택합니다. 해당 단계의 주소 사양과 일치하는 경로가 없으면 각 단계에서 프로세스가 다음 단계에서 계속됩니다.

  1. 미러 주소를 지정하는 경로 중에서 하나의 경로를 선택합니다.

  2. 네트워크 주소로 ‘LOCAL’을 지정하는 경로 중에서 하나의 경로를 선택합니다. 대화에 지정된 이름과 일치하는 서비스가 이 SQL Server 인스턴스에 포함되어 있지 않으면 3단계를 계속합니다.

  3. 네트워크 주소를 지정하는 경로 중에서 하나의 경로를 선택합니다.

  4. 네트워크 주소로 ‘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가 보안 주체를 식별하면 Service Broker는 미러 인스턴스에 연결하지 않고도 해당 경로를 사용하는 모든 메시지를 해당 보안 주체로 보냅니다. 보안 주체가 연결할 수 없는 상태이거나 해당 인스턴스가 더 이상 보안 주체가 아님을 나타낼 경우 다른 주소의 SQL Server 인스턴스가 새 보안 주체임을 나타내면 Service Broker는 이 쌍에 대한 다른 주소로 메시지를 보냅니다.

Service Broker가 보안 주체에 연결할 수 없지만 파트너가 새 보안 주체가 아닐 경우 Service Broker는 해당 파트너에 메시지를 보내지 않습니다. 그런 다음, Service Broker는 보안 주체가 연결할 수 있는 상태가 되거나 파트너가 보안 주체가 될 때까지 보안 주체 주소와 파트너 주소를 다시 시도합니다. 이 방법을 통해 Service Broker는 보안 주체와 파트너가 통신할 수는 있지만 메시지를 보내는 인스턴스가 보안 주체에 연결하지 못하는 경우에도 메시지를 안정적으로 배달합니다.

참고 항목