적용 대상:SQL Server
Azure SQL Managed Instance
이 섹션에서는 Service Broker 라우팅 프로세스의 예를 제공합니다. 각 예제에는 AdventureWorks2008R2 및 msdb에 대한 샘플 라우팅 테이블이 포함되어 있으며, Service Broker가 이러한 라우팅 테이블을 사용하여 메시지의 경로를 선택하는 방법이 설명되어 있습니다.
이 항목에 제시된 라우팅 테이블은 카탈로그 뷰의 sys.routes 간소화된 버전입니다. 경로 ID와 소유자는 라우팅 프로세스에 중요하지 않으며 모든 경로는 무기한 수명을 갖는 것으로 간주됩니다.
열의 NULL 값이 remote_service_name 서비스 이름과 일치합니다. 열의 NULL 값은 broker_instance Service Broker 식별자와 일치합니다.
보내는 메시지에 대한 예제에서는 라우팅 테이블을 msdb사용하지 않으며 들어오는 메시지 및 메시지 전달 예제에서는 라우팅 테이블을 AdventureWorks2008R2사용하지 않습니다.
예제 1: 기본 구성
이 예제에서는 Service Broker 라우팅의 기본 구성을 설명합니다. 기본적으로 모든 master를 제외한 데이터베이스에는 AutoCreatedLocal 경로가 포함됩니다. 따라서 라우팅 테이블 AdventureWorks2008R2msdb 은 다음 정보를 포함하고 있습니다.
| 칼럼 | AdventureWorks2008R2 | msdb |
|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
broker_instance |
NULL |
NULL |
address |
LOCAL |
LOCAL |
mirror_address |
NULL |
NULL |
이 경우 데이터베이스에서 AdventureWorks2008R2 만든 모든 대화 상자가 현재 인스턴스의 서비스로 전달됩니다. 또한 인스턴스 외부에서 도착하는 모든 대화 상자는 현재 인스턴스의 서비스로 전달됩니다.
대화는 AdventureWorks2008R2에서 생성된 경우, AutoCreatedLocal이/가 AdventureWorks2008R2.sys.routes에서 유일한 경로입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
이 프로세스는 인스턴스 외부에서 도착하는 대화의 경우 동일합니다. 인스턴스 AutoCreatedLocal 외부에서 도착하는 대화의 경우 유일한 경로 msdb.sys.routes입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 2: 특정 서비스에 대한 네트워크 경로
이 예제에서는 현재 인스턴스 외부의 서비스에 대한 일반적인 라우팅 구성을 설명합니다. 외부 서비스에 대한 경로를 구성하려면 데이터베이스에서 대화를 시작하는 경로를 만듭니다. 이 예제에서는 AdventureWorks2008R2 서비스에 OrderParts대한 경로를 포함합니다. 경로에는 서비스에 대한 네트워크 주소가 포함됩니다 OrderParts .
| 칼럼 | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
OrderPartsRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
OrderParts |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://host2.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
이 경우 데이터베이스에서 AdventureWorks2008R2 서비스에 OrderParts 대해 만든 모든 대화 상자가 경로 OrderPartsRoute와 일치합니다. Service Broker는 이러한 메시지를 네트워크 주소 TCP://host2.Adventure-Works.com:4022/로 보냅니다. 다른 모든 대화는 동일한 인스턴스의 서비스로 전달됩니다.
대상 서비스가 AdventureWorks2008R2인 OrderParts 대화의 경우, 이 경로가 서비스 이름과 정확히 일치하기 때문에 OrderPartsRoute를 포함하는 경로 집합이 포함됩니다.
OrderPartsRoute 는 일치하는 경로 집합의 유일한 경로이므로 Service Broker는 해당 경로를 선택합니다.
AdventureWorks2008R2에서 다른 대상 서비스로 생성된 대화의 경우, 일치하는 경로 집합에 AutoCreatedLocal가 포함됩니다. 일치하는 경로 집합에서 유일한 경로이므로 Service Broker는 해당 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없는 경우 Service Broker는 대화를 DELAYED표시합니다.
인스턴스 AutoCreatedLocal 외부에서 도착하는 대화의 경우 유일한 경로 msdb.sys.routes입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 3: 미러된 데이터베이스에 대한 네트워크 경로
이 예제에서는 현재 인스턴스 외부의 미러된 데이터베이스에서 호스트하는 서비스에 대한 일반적인 라우팅 구성을 설명합니다. 외부 서비스에 대한 경로를 구성하려면 데이터베이스에서 대화를 시작하는 경로를 만듭니다. 이 예제에서는 AdventureWorks2008R2 서비스에 OrderParts대한 경로를 포함합니다. 경로에는 서비스에 대한 네트워크 주소와 미러 주소가 OrderParts 모두 포함됩니다.
| 칼럼 | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
OrderPartsRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
OrderParts |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://partner1.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
TCP://partner2.Adventure-Works.com:4022/ |
NULL |
대상 서비스가 AdventureWorks2008R2인 OrderParts 대화의 경우, 이 경로가 서비스 이름과 정확히 일치하기 때문에 OrderPartsRoute를 포함하는 경로 집합이 포함됩니다.
OrderPartsRoute 는 일치하는 경로 집합의 유일한 경로이므로 Service Broker는 해당 경로를 선택합니다. Service Broker는 주소와 미러 주소를 모두 검사하고 보안 주체인 파트너를 확인한 다음 해당 주체에게 메시지를 보냅니다.
AdventureWorks2008R2에서 다른 대상 서비스로 생성된 대화의 경우, 일치하는 경로 집합에 AutoCreatedLocal가 포함됩니다. 일치하는 경로 집합에서 유일한 경로이므로 Service Broker는 해당 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없는 경우 Service Broker는 대화를 DELAYED표시합니다.
인스턴스 AutoCreatedLocal 외부에서 도착하는 대화의 경우 유일한 경로 msdb.sys.routes입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 4: 모든 외부 서비스에 대한 네트워크 경로
이 예제에서는 서비스가 로컬 인스턴스에 존재하지 않는 경우 AdventureWorks2008R2의 서비스를 다른 인스턴스로 메시지를 보냅니다. 로컬 인스턴스에 없는 모든 서비스에 대한 메시지는 동일한 네트워크 주소로 이동합니다. 이 구성은 해당 네트워크 주소의 SQL Server 인스턴스가 메시지 전달을 수행하는 경우에 유용할 수 있습니다.
이 예제에서 AdventureWorks2008R2 데이터베이스에는 주소AutoCreatedLocal에 대한 TCP://forwarding.Adventure-Works.com:4022/ 경로뿐만 아니라 경로도 포함됩니다.
| 칼럼 | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
ExternalRoute |
AutoCreatedLocal |
remote_service_name |
NULL |
NULL |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
TCP://forwarding.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
생성된 AdventureWorks2008R2 대화의 경우, 원격 서비스 이름과 broker 인스턴스가 두 경로에 대해 동일하기 때문에, 일치하는 경로의 집합에는 AutoCreatedLocal, ExternalRoute가 모두 포함됩니다. Service Broker는 이러한 두 경로 중에서 선택해야 합니다. Service Broker는 네트워크 주소를 지정하는 경로 앞에 주소 'LOCAL' 가 있는 경로를 선택하므로 Service Broker가 AutoCreatedLocal먼저 선택합니다. 대상 서비스가 로컬 인스턴스에 있는 경우 Service Broker는 이 경로를 사용하여 해당 서비스로 메시지를 전달합니다. 그러나 대상 서비스가 로컬 인스턴스에 없으면 Service Broker가 선택합니다 ExternalRoute.
인스턴스 AutoCreatedLocal 외부에서 도착하는 대화의 경우 유일한 경로 msdb.sys.routes입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 5: 서비스의 다른 인스턴스로 네트워크 경로
이 예제에서는 두 개의 서로 다른 네트워크 주소가 동일한 서비스의 서로 다른 인스턴스를 호스트하는 라우팅 구성을 보여 줍니다. 이 구성은 부하 분산 구성에 유용할 수 있습니다.
이 예제에서 AdventureWorks2008R2 데이터베이스에는 서비스에 AutoCreatedLocal대한 BalancedService 경로뿐만 아니라 경로도 포함됩니다.
| 칼럼 | AdventureWorks2008R2 | AdventureWorks2008R2 | AdventureWorks2008R2 | msdb |
|---|---|---|---|---|
name |
AutoCreatedLocal |
BalancedRouteOne |
BalancedRouteTwo |
AutoCreatedLocal |
remote_service_name |
NULL |
BalancedService |
BalancedService |
NULL |
broker_instance |
NULL |
5fb8d92b-ed69-4c80-afbb-2aa6a7d3cb2d |
81b1d3d0-288e-4d2c-b1d3-456cbb944b4f |
NULL |
address |
LOCAL |
TCP://server1.Adventure-Works.com:4022/ |
TCP://server2.Adventure-Works.com:4022/ |
LOCAL |
mirror_address |
NULL |
NULL |
NULL |
NULL |
Service Broker 식별자를 지정하지 않은 상태에서 AdventureWorks2008R2 데이터베이스에서 BalancedService로 생성된 대화의 경우, 일치하는 경로 집합에는 BalancedRouteOne 또는 BalancedRouteTwo이 포함됩니다. 경로에 다른 Service Broker 식별자가 포함되어 있으므로 일치 프로세스는 임의로 Service Broker 식별자를 선택하고 해당 경로와 일치합니다. 하나의 경로만 일치하므로 Service Broker는 대화에 대해 해당 경로를 선택합니다. 그 결과 일부 대화는 TCP://server1.Adventure-Works.com:4022/로 라우팅되고, 다른 대화는 TCP://server2.Adventure-Works.com:4022/로 라우팅됩니다. 그러나 Service Broker가 대화의 메시지에 대한 승인을 받으면 대화의 다른 메시지에 대해 승인에 포함된 Service Broker 식별자를 사용합니다. 첫 번째 승인이 수신되면 앞으로 대화에 사용되는 모든 메시지가 승인의 Service Broker 식별자를 사용하여 라우팅됩니다.
데이터베이스에서 AdventureWorks2008R2 라우팅 테이블의 Service Broker 식별자 중 하나를 지정하는 서비스에 BalancedService 대해 만든 대화의 경우 일치하는 경로 집합에는 Service Broker 식별자와 일치하는 경로가 포함됩니다. 대화는 해당 Service Broker 식별자를 사용하여 경로의 주소로 라우팅됩니다.
다른 대상 서비스에 생성된 AdventureWorks2008R2 대화의 경우 일치하는 경로 집합에만 AutoCreatedLocal포함됩니다. Service Broker가 해당 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없는 경우 Service Broker는 대화를 DELAYED표시합니다.
인스턴스 AutoCreatedLocal 외부에서 도착하는 대화의 경우 유일한 경로 msdb.sys.routes입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 6: 특정 서비스에 대한 메시지 전달
다음은 로컬 인스턴스 외부에서 네트워크 주소ElsewhereService로 메시지를 서비스 TCP://elsewhere.Adventure-Works.com:4022/ 로 전달하는 예제입니다. 다른 모든 서비스의 경우 Service Broker는 로컬 인스턴스의 서비스에 메시지를 전달하거나 서비스가 로컬 인스턴스에 없는 경우 대화를 DELAYED 표시합니다.
| 칼럼 | AdventureWorks2008R2 | msdb | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
ForwardingRoute |
remote_service_name |
NULL |
NULL |
ElsewhereService |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
LOCAL |
TCP://elsewhere.Adventure-Works.com:4022/ |
mirror_address |
NULL |
NULL |
NULL |
대화는 AdventureWorks2008R2에서 생성된 경우, AutoCreatedLocal이/가 AdventureWorks2008R2.sys.routes에서 유일한 경로입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없는 경우 Service Broker는 대화를 DELAYED표시합니다.
AdventureWorks2008R2에서 ElsewhereService 서비스로 생성된 대화가 TCP://elsewhere.Adventure-Works.com:4022/로 라우팅되지 않습니다.
인스턴스 외부에서 서비스 ElsewhereService로 도착하는 대화의 경우 경로 ForwardingRoute 가 서비스 이름과 정확히 일치합니다. 따라서 ForwardingRoute 일치하는 경로 집합의 유일한 경로이며, Service Broker는 메시지 전달이 설정된 경우 해당 경로를 선택합니다. Service Broker는 로컬 인스턴스에 서비스가 ElsewhereService포함된 경우에도 이 경로를 선택합니다. 메시지 전달이 꺼져 있으면 Service Broker에서 메시지를 삭제합니다.
인스턴스 외부에서 다른 모든 서비스로 도착하는 대화의 경우, AutoCreatedLocal은 msdb.sys.routes에서 일치하는 유일한 경로입니다. Service Broker가 해당 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없으면 메시지가 삭제됩니다.
예제 7: 인스턴스에 없는 모든 서비스에 대한 메시지 전달
이 예제에서는 로컬 인스턴스에 서비스가 없는 경우 로컬 인스턴스의 외부에서 다른 인스턴스로 메시지를 보냅니다. 모든 외부 서비스에 대한 메시지는 동일한 네트워크 주소로 이동합니다. 이 구성은 메시지 전달에 유용할 수 있습니다.
| 칼럼 | AdventureWorks2008R2 | msdb | msdb |
|---|---|---|---|
name |
AutoCreatedLocal |
AutoCreatedLocal |
ForwardingRoute |
remote_service_name |
NULL |
NULL |
NULL |
broker_instance |
NULL |
NULL |
NULL |
address |
LOCAL |
LOCAL |
TCP://forwarding.Adventure-Works.com:4022/ |
mirror_address |
NULL |
NULL |
NULL |
대화는 AdventureWorks2008R2에서 생성된 경우, AutoCreatedLocal이/가 AdventureWorks2008R2.sys.routes에서 유일한 경로입니다. 해당 경로가 일치하는 경로 집합에 있는 유일한 경로인 경우 Service Broker는 이 경로를 선택합니다. 메시지에 대한 서비스가 로컬 인스턴스에 없는 경우 Service Broker는 대화를 DELAYED표시합니다.
데이터베이스 외부에서 도착하는 대화의 경우 일치하는 경로 집합에는 둘 다 포함되며AutoCreatedLocal, 두 경로 모두 ForwardingRoute 동일한 원격 서비스 이름과 Service Broker 식별자를 지정하기 때문입니다. Service Broker는 이러한 두 경로 중에서 선택해야 합니다. Service Broker는 네트워크 주소를 지정하는 경로 앞에 주소 'LOCAL' 가 있는 경로를 선택하므로 Service Broker가 AutoCreatedLocal먼저 선택합니다. 대상 서비스가 로컬 인스턴스에 있는 경우 Service Broker는 이 경로를 사용하여 해당 서비스로 메시지를 전달합니다. 그러나 대상 서비스가 로컬 인스턴스에 없고 메시지 전달이 켜진 경우 Service Broker는 선택합니다 ForwardingRoute. 메시지 전달이 켜지지 않으면 대상 서비스가 로컬 인스턴스에 없으면 Service Broker에서 메시지를 삭제합니다.