다음을 통해 공유


Service Broker 라우팅 예

이 섹션에서는 Service Broker 라우팅 프로세스의 예를 보여 줍니다. 각 예마다 AdventureWorksmsdb의 예제 라우팅 테이블이 있으며 Service Broker에서 이러한 라우팅 테이블을 사용하여 메시지의 경로를 선택하는 방법에 대해 설명합니다.

이 항목에 있는 라우팅 테이블은 sys.routes 카탈로그 뷰의 단순화된 버전입니다. 라우팅 프로세스에서 경로 ID와 소유자는 중요하지 않으며 모든 경로는 수명이 무제한이라고 간주됩니다.

remote_service_name 열의 NULL 값은 서비스 이름과 일치하고 broker_instance 열의 NULL 값은 Service Broker 식별자와 일치합니다.

보내는 메시지에 대한 예에서는 msdb의 라우팅 테이블을 사용하지 않으며 받는 메시지와 메시지 전달에 대한 예에서는 AdventureWorks의 라우팅 테이블을 사용하지 않습니다.

예 1: 기본 구성

이 예에서는 Service Broker 라우팅의 기본 구성에 대해 설명합니다. 기본적으로 master를 제외한 모든 데이터베이스에는 AutoCreatedLocal 경로가 있습니다. 따라서 AdventureWorksmsdb의 라우팅 테이블에는 다음과 같은 정보가 있습니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

이 경우 AdventureWorks 데이터베이스에서 만든 모든 대화 상자가 현재 인스턴스의 서비스로 배달됩니다. 또한 이 인스턴스 외부에서 도착하는 모든 대화 상자도 현재 인스턴스의 서비스로 배달됩니다.

AdventureWorks에서 생성된 대화의 경우 AdventureWorks.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

인스턴스 외부에서 도착한 대화에도 같은 프로세스가 사용됩니다. 인스턴스 외부에서 도착하는 대화의 경우 msdb.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 2: 특정 서비스의 네트워크 경로

이 예에서는 현재 인스턴스 외부 서비스의 일반적인 라우팅 구성에 대해 설명합니다. 외부 서비스에 대한 경로를 구성하려면 대화를 시작하는 데이터베이스에 경로를 만듭니다. 이 예에서 AdventureWorks는 서비스 OrderParts에 대한 경로를 포함합니다. 경로에는 OrderParts 서비스의 네트워크 주소가 포함됩니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://host2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

이 경우 OrderParts 서비스에 대해 AdventureWorks 데이터베이스에서 만든 모든 대화 상자가 OrderPartsRoute 경로와 일치합니다. Service Broker에서 이러한 메시지를 네트워크 주소 **tcp://host2.Adventure-Works.com:4022/**로 보냅니다. 다른 모든 대화는 같은 인스턴스의 서비스로 배달됩니다.

OrderParts의 대상 서비스를 사용하여 AdventureWorks에서 생성된 대화의 경우 일치하는 경로 집합에 OrderParts가 포함됩니다. 이 경로가 서비스 이름과 정확하게 일치하기 때문입니다. 일치하는 경로 집합에 있는 유일한 경로가 OrderPartsRoute이기 때문에 Service Broker는 해당 경로를 선택합니다.

다른 대상 서비스에 대해 AdventureWorks에서 생성된 대화의 경우 일치하는 경로 집합에 AutoCreatedLocal이 포함됩니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker는 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 Service Broker는 해당 대화를 DELAYED로 표시합니다.

인스턴스 외부에서 도착하는 대화의 경우 msdb.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 3: 미러링된 데이터베이스에 대한 네트워크 경로

이 예에서는 현재 인스턴스 외부의 미러링된 데이터베이스에서 호스팅하는 서비스의 일반적인 라우팅 구성에 대해 설명합니다. 외부 서비스에 대한 경로를 구성하려면 대화를 시작하는 데이터베이스에 경로를 만듭니다. 이 예에서 AdventureWorks는 서비스 OrderParts에 대한 경로를 포함합니다. 경로에는 OrderParts 서비스의 네트워크 주소와 미러 주소가 둘 다 포함됩니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderPartsRoute

OrderParts

NULL

tcp://partner1.Adventure-Works.com:4022/

tcp://partner2.Adventure-Works.com:4022/

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

OrderParts의 대상 서비스를 사용하여 AdventureWorks에서 생성된 대화의 경우 일치하는 경로 집합에 OrderParts가 포함됩니다. 이 경로가 서비스 이름과 정확하게 일치하기 때문입니다. 일치하는 경로 집합에 있는 유일한 경로가 OrderPartsRoute이기 때문에 Service Broker는 해당 경로를 선택합니다. Service Broker는 주소와 미러 주소를 둘 다 점검하여 주요 파트너를 확인한 다음 주요 파트너에게 메시지를 보냅니다.

다른 대상 서비스에 대해 AdventureWorks에서 생성된 대화의 경우 일치하는 경로 집합에 AutoCreatedLocal이 포함됩니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker는 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 Service Broker는 해당 대화를 DELAYED로 표시합니다.

인스턴스 외부에서 도착하는 대화의 경우 msdb.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 4: 모든 외부 서비스에 대한 네트워크 경로

이 예에서는 로컬 인스턴스에 서비스가 없을 경우 AdventureWorks의 서비스에서 다른 인스턴스로 메시지를 보냅니다. 로컬 인스턴스에 없는 서비스로 보내는 메시지는 같은 네트워크 주소로 전송됩니다. 이 구성은 네트워크 주소에 있는 SQL Server 인스턴스에서 메시지를 전달하는 경우 유용할 수 있습니다.

이 예에서 AdventureWorks 데이터베이스에는 AutoCreatedLocal 경로와 tcp://forwarding.Adventure-Works.com:4022/ 주소에 대한 경로가 있습니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ExternalRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

AdventureWorks에서 생성된 대화의 경우 두 경로의 원격 서비스 이름과 Broker 인스턴스가 같으므로 일치하는 경로 집합에 AutoCreatedLocalExternalRoute가 둘 다 포함됩니다. Service Broker는 이 두 경로 중 하나를 선택해야 합니다. Service Broker는 네트워크 주소를 지정하는 경로보다 주소 **'LOCAL'**이 있는 경로를 먼저 선택하므로 AutoCreatedLocal을 가장 먼저 선택합니다. 로컬 인스턴스에 대상 서비스가 있으면 Service Broker는 이 경로를 사용하여 메시지를 해당 서비스로 배달합니다. 그러나 대상 서비스가 로컬 인스턴스에 없으면 Service Broker는 ExternalRoute를 선택합니다.

인스턴스 외부에서 도착하는 대화의 경우 msdb.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 5: 서비스의 다른 인스턴스에 대한 네트워크 경로

이 예에서는 두 개의 다른 네트워크 주소가 같은 서비스의 서로 다른 인스턴스를 호스팅하는 라우팅 구성을 보여 줍니다. 이 구성은 로드 균형 조정 구성에 유용합니다.

이 예에서는 AdventureWorks 데이터베이스에 AutoCreatedLocal 경로와 BalancedService 서비스에 대한 경로가 있습니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

BalancedRouteOne

BalancedService

5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d

tcp://server1.Adventure-Works.com:4022/

NULL

BalancedRouteTwo

BalancedService

81b1d3d0-288e-4d2c-b1d3-456cbb944b4f

tcp://server2.Adventure-Works.com:4022/

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

Service Broker 식별자를 지정하지 않는 BalancedService에 대해 AdventureWorks 데이터베이스에서 생성된 대화의 경우 일치하는 경로 집합에 BalancedRouteOneBalancedRouteTwo 중 하나가 있습니다. 경로에 여러 Service Broker 식별자가 있으므로 일치 프로세스에서 임의로 Service Broker 식별자를 선택하여 해당 경로를 일치시킵니다. 경로가 하나만 일치하므로 Service Broker는 대화에 대해 해당 경로를 선택합니다. 그 결과 일부 대화 경로에는 **tcp://server1.Adventure-Works.com:4022/**를 선택하고 일부 대화 경로에는 **tcp://server2.Adventure-Works.com:4022/**를 선택합니다. 그러나 Service Broker가 대화의 메시지에 대한 승인을 받으면 대화의 다른 메시지에 대해 승인에 포함된 Service Broker 식별자를 사용합니다. 첫 번째 승인이 수신되면 앞으로 대화에 사용되는 모든 메시지가 승인의 Service Broker 식별자를 사용하여 라우팅됩니다.

라우팅 테이블에 있는 Service Broker 식별자 중 하나를 지정하는 BalancedService 서비스에 대해 AdventureWorks 데이터베이스에서 생성된 대화의 경우 일치하는 경로 집합에 Service Broker 식별자와 일치하는 경로가 있습니다. 대화는 해당 Service Broker 식별자가 있는 경로의 주소로 라우팅됩니다.

다른 대상 서비스에 대해 AdventureWorks에서 생성된 대화의 경우 일치하는 경로 집합에 AutoCreatedLocal만 있습니다. Service Broker는 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 Service Broker는 해당 대화를 DELAYED로 표시합니다.

인스턴스 외부에서 도착하는 대화의 경우 msdb.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 6: 특정 서비스에 대한 메시지 전달

이 예에서는 로컬 인스턴스 외부에서 네트워크 주소가 **tcp://elsewhere.Adventure-Works.com:4022/**인 ElsewhereService 서비스로 메시지를 전달합니다. 다른 모든 서비스의 경우 Service Broker가 로컬 인스턴스의 서비스로 메시지를 배달합니다. 로컬 인스턴스에 서비스가 없으면 대화를 DELAYED로 표시합니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

ElsewhereService

NULL

tcp://elsewhere.Adventure-Works.com:4022/

NULL

AdventureWorks에서 생성된 대화의 경우 AdventureWorks.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 Service Broker는 해당 대화를 DELAYED로 표시합니다. ElsewhereService 서비스에 대해 AdventureWorks에서 생성된 대화는 **tcp://elsewhere.Adventure-Works.com:4022/**로 라우팅되지 않습니다.

외부 인스턴스에서 ElsewhereService 서비스로 도착하는 대화의 경우 ForwardingRoute 경로가 서비스 이름과 정확히 일치합니다. 따라서 ForwardingRoute가 일치하는 경로 집합에 있는 유일한 경로이기 때문에 메시지 전달을 사용하면 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 ElsewhereService 서비스가 있어도 Service Broker는 이 경로를 선택합니다. 메시지 전달을 사용하지 않으면 Service Broker에서 메시지를 삭제합니다.

인스턴스 외부에서 다른 모든 서비스로 도착하는 대화의 경우 msdb.sys.routes에서 AutoCreatedLocal이 일치하는 유일한 경로입니다. Service Broker는 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 해당 메시지는 삭제됩니다.

예 7: 인스턴스에 없는 모든 서비스에 대한 메시지 전달

이 예에서는 로컬 인스턴스에 서비스가 없을 경우 로컬 인스턴스 외부에서 다른 인스턴스로 메시지를 보냅니다. 모든 외부 서비스로 보내는 메시지는 같은 네트워크 주소로 전송됩니다. 이 구성은 메시지 전달에 유용합니다.

AdventureWorks.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

msdb.sys.routes

name

remote_service_name

broker_instance

address

mirror_address

AutoCreatedLocal

NULL

NULL

LOCAL

NULL

ForwardingRoute

NULL

NULL

tcp://forwarding.Adventure-Works.com:4022/

NULL

AdventureWorks에서 생성된 대화의 경우 AdventureWorks.sys.routesAutoCreatedLocal 경로만 있습니다. 일치하는 경로 집합에 있는 유일한 경로가 이 경로이기 때문에 Service Broker가 해당 경로를 선택합니다. 로컬 인스턴스에 메시지 서비스가 없으면 Service Broker는 해당 대화를 DELAYED로 표시합니다.

데이터베이스 외부에서 도착하는 대화의 경우 두 경로가 같은 원격 서비스 이름과 Service Broker 식별자를 지정하므로 일치하는 경로 집합에 AutoCreatedLocalForwardingRoute가 둘 다 포함됩니다. Service Broker는 이 두 경로 중 하나를 선택해야 합니다. Service Broker는 네트워크 주소를 지정하는 경로보다 주소 **'LOCAL'**이 있는 경로를 먼저 선택하므로 AutoCreatedLocal을 가장 먼저 선택합니다. 로컬 인스턴스에 대상 서비스가 있으면 Service Broker는 이 경로를 사용하여 메시지를 해당 서비스로 배달합니다. 그러나 대상 서비스가 로컬 인스턴스에 없고 메시지 전달을 사용할 경우 Service Broker는 ForwardingRoute를 선택합니다. 메시지 전달을 사용하지 않으면 대상 서비스가 로컬 인스턴스에 없을 경우 Service Broker가 해당 메시지를 삭제합니다.