CREATE BROKER PRIORITY(Transact-SQL)

 

이 항목은 다음에 적용됩니다.예SQL Server(2008부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스

우선 순위 수준을 정의하고 우선 순위 수준을 할당할 Service Broker 대화를 결정하기 위한 조건 집합을 설정합니다. 계약 및 대화 우선 순위에 지정 된 서비스의 동일한 조합을 사용 하는 모든 대화 끝점에 우선 순위 수준이 할당 됩니다. 우선 순위 값의 범위는 1(낮음)에서 10(높음) 사이입니다. 기본값은 5입니다.

Topic link icon Transact-SQL 구문 표기 규칙

  
CREATE BROKER PRIORITY ConversationPriorityName  
FOR CONVERSATION  
[ SET ( [ CONTRACT_NAME = {ContractName | ANY } ]  
        [ [ , ] LOCAL_SERVICE_NAME = {LocalServiceName | ANY } ]  
        [ [ , ] REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY } ]  
        [ [ , ] PRIORITY_LEVEL = {PriorityValue | DEFAULT } ]  
       )  
]  
[;]  
  

ConversationPriorityName
이 대화 우선 순위의 이름을 지정합니다. 이름은 현재 데이터베이스에서 고유 해야 하며 규칙을 준수 해야 데이터베이스 엔진 식별자합니다.

SET
대화 우선 순위를 대화에 적용할지 여부를 결정하는 조건을 지정합니다. 지정된 경우 SET이 CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME 또는 PRIORITY_LEVEL 조건을 하나 이상 포함해야 합니다. SET이 지정되지 않은 경우 세 조건 모두에 대한 기본값이 설정됩니다.

CONTRACT_NAME = {ContractName | ANY}
대화 우선 순위를 대화에 적용할지 여부를 결정하기 위한 조건으로 사용할 계약 이름을 지정합니다. ContractName 는 데이터베이스 엔진 식별자, 하며 현재 데이터베이스에는 계약의 이름을 지정 해야 합니다.

ContractName
대화 우선 순위 대화 대화를 시작한 BEGIN DIALOG 문에 ON CONTRACT를 지정 하는 위치에 적용 될 수 있도록 지정 ContractName합니다.

ANY
사용하는 계약에 관계없이 모든 대화에 대화 우선 순위가 적용될 수 있도록 지정합니다.

기본값은 ANY입니다.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
대화 끝점에 대화 우선 순위를 적용할지 여부를 결정하는 조건으로 사용될 서비스 이름을 지정합니다.

LocalServiceName 는 데이터베이스 엔진 식별자입니다. 현재 데이터베이스에 있는 서비스의 이름을 지정해야 합니다.

LocalServiceName
대화 우선 순위가 다음 항목에 적용될 수 있도록 지정합니다.

  • 시작자 서비스 이름이 일치 하는 모든 시작자 대화 끝점 LocalServiceName합니다.

  • 모든 대상 대화 끝점 대상 서비스 이름이 일치 LocalServiceName합니다.

ANY

  • 끝점에서 사용하는 로컬 서비스 이름에 관계없이 모든 대화 끝점에 대화 우선 순위가 적용될 수 있도록 지정합니다.

기본값은 ANY입니다.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
대화 끝점에 대화 우선 순위를 적용할지 여부를 결정하는 조건으로 사용될 서비스 이름을 지정합니다.

RemoteServiceName 는 형식의 리터럴 nvarchar (256)합니다. Service Broker바이트 단위 비교를 사용 하 여 일치 하는 RemoteServiceName 문자열입니다. 비교 시 대/소문자가 구분되고 현재 데이터 정렬은 고려되지 않습니다. 대상 서비스는 현재 데이터베이스 엔진 인스턴스 또는 원격 데이터베이스 엔진 인스턴스에 있을 수 있습니다.

'RemoteServiceName'
대화 우선 순위가 다음 항목에 적용될 수 있도록 지정합니다.

  • 와 연결 된 대상 서비스 이름이 같은 모든 시작자 대화 끝점 RemoteServiceName합니다.

  • 연결 된 시작자 서비스 이름이 일치 하는 모든 대상 대화 끝점 RemoteServiceName합니다.

ANY
끝점과 연결된 원격 서비스 이름에 관계없이 모든 대화 끝점에 대화 우선 순위가 적용되도록 지정합니다.

기본값은 ANY입니다.

PRIORITY_LEVEL = { PriorityValue | 기본 }
대화 우선 순위에 지정된 계약 및 서비스를 사용하는 모든 대화 끝점에 할당할 우선 순위를 지정합니다. PriorityValue 정수 리터럴 1 (가장 낮은 우선 순위)에서 10 (가장 높은 우선 순위) 여야 합니다. 기본값은 5입니다.

Service Broker는 대화 끝점에 우선 순위 수준을 할당합니다. 우선 순위 수준은 끝점과 연관된 작업의 우선 순위를 제어합니다. 각 대화에는 두 개의 대화 끝점이 있습니다.

  • 시작자 대화 끝점은 대화의 한 쪽을 시작자 서비스 및 시작자 큐와 연결합니다. 시작자 대화 끝점은 BEGIN DIALOG 문이 실행될 때 생성됩니다. 시작자 대화 끝점과 연관된 작업에는 다음이 포함됩니다.

    • 시작자 서비스에서 보내기

    • 시작자 큐에서 받기

    • 시작자 큐에서 다음 대화 그룹 가져오기

  • 대상 대화 끝점은 대화의 다른 한 쪽을 대상 서비스 및 큐와 연결합니다. 대상 대화 끝점은 대화를 사용하여 대상 큐에 메시지를 보낼 때 생성됩니다. 대상 대화 끝점과 연관된 작업에는 다음이 포함됩니다.

    • 대상 큐에서 받기

    • 대상 서비스에서 보내기

    • 대상 큐에서 다음 대화 그룹 가져오기

Service Broker는 대화 끝점이 생성될 때 대화 우선 순위 수준을 할당합니다. 대화 끝점은 대화가 종료될 때까지 우선 순위 수준을 그대로 유지합니다. 새 우선 순위 또는 기존 우선 순위의 변경 사항은 기존 대화에 적용되지 않습니다.

Service Broker계약 및 서비스 조건을 가진 최상의 끝점의 속성과 일치 하는 대화 우선 순위에서 대화 끝점에 우선 순위 수준을 할당 합니다. 다음 표에서는 일치 우선 순위를 보여 줍니다.

작업 계약작업 로컬 서비스작업 원격 서비스
ContractNameLocalServiceNameRemoteServiceName
ContractNameLocalServiceNameANY
ContractNameANYRemoteServiceName
ContractNameANYANY
ANYLocalServiceNameRemoteServiceName
ANYLocalServiceNameANY
ANYANYRemoteServiceName
ANYANYANY

Service Broker는 먼저 지정된 계약, 로컬 서비스 및 원격 서비스가 작업에 사용된 것과 일치하는 우선 순위를 찾습니다. 하나는 없는 경우 Service Broker 우선 순위는 계약 및 작업을 사용 하 고 원격 서비스가 ANY로 지정 된 위치와 일치 하는 로컬 서비스를 찾습니다. 이는 우선 순위 표에 나열된 다양한 우선 순위 모두에 대해 계속 수행됩니다. 일치하는 항목이 발견되지 않으면 해당 작업에 기본 우선 순위 5가 할당됩니다.

Service Broker는 대화 끝점마다 개별적으로 우선 순위 수준을 할당합니다. Service Broker에서 시작자와 대상 대화 끝점 모두에 우선 순위 수준을 할당하도록 하려면 두 끝점에 대화 우선 순위가 적용되는지 확인해야 합니다. 시작자 대화 끝점과 대상 대화 끝점이 각기 다른 데이터베이스에 있는 경우 각 데이터베이스에 대화 우선 순위를 만들어야 합니다. 대화의 두 대화 끝점에는 일반적으로 동일한 우선 순위 수준이 지정되지만 다른 우선 순위를 지정할 수도 있습니다.

큐에서 메시지나 대화 그룹 식별자를 수신하는 작업에는 항상 우선 순위 수준이 적용됩니다. 우선 순위 수준은 또한 한 데이터베이스 엔진 인스턴스에서 다른 인스턴스로 메시지를 전송할 때도 적용됩니다.

다음과 같이 메시지를 전송할 때는 우선 순위 수준이 사용되지 않습니다.

  • HONOR_BROKER_PRIORITY 데이터베이스 옵션이 OFF로 설정된 데이터베이스에서 전송하는 경우. 자세한 내용은 ALTER DATABASE SET 옵션(Transact-SQL)을 참조하세요.

  • 동일한 Database Engine 인스턴스의 서비스 간에 전송하는 경우

  • 모든 Service Broker 데이터베이스에 없는 대화 우선 순위를 만든 경우 데이터베이스 작업 5의 기본 우선 순위를 할당 됩니다.

대화 우선 순위를 만들 수 있는 권한은 기본적으로 db_ddladmin 또는 db_owner 고정 데이터베이스 역할 및 sysadmin 고정 서버 역할의 멤버에게 있습니다. 데이터베이스에 대한 ALTER 권한이 필요합니다.

1. 대화의 양쪽 방향에 우선 순위 수준 할당

다음 두 대화 우선 순위는 SimpleContractTargetService 사이에서 InitiatorAService를 사용하는 모든 작업에 우선 순위 수준 3을 할당합니다.

CREATE BROKER PRIORITY InitiatorAToTargetPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = InitiatorServiceA,  
         REMOTE_SERVICE_NAME = N'TargetService',  
         PRIORITY_LEVEL = 3);  
CREATE BROKER PRIORITY TargetToInitiatorAPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = TargetService,  
         REMOTE_SERVICE_NAME = N'InitiatorServiceA',  
         PRIORITY_LEVEL = 3);  

2. 계약을 사용하는 모든 대화의 우선 순위 수준 설정

7라는 계약을 사용하는 모든 작업에 우선 순위 수준 SimpleContract을 할당합니다. 이 경우 SimpleContract와 로컬 또는 원격 서비스를 모두 지정하는 다른 우선 순위가 없다고 가정합니다.

CREATE BROKER PRIORITY SimpleContractDefaultPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 7);  

3. 데이터베이스의 기본 우선 순위 수준 설정

두 특정 서비스의 대화 우선 순위를 정의한 다음 다른 모든 대화 끝점과 일치하는 대화 우선 순위를 정의합니다. 이는 항상 5인 기본 우선 순위를 대체하지 않지만 기본값이 할당되는 항목 수를 최소화합니다.

CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ClaimPriority]  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = ANY,  
         LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 9);  
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/ApprovalPriority]  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = ANY,  
         LOCAL_SERVICE_NAME = //Adventure-Works.com/Expenses/ClaimService,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 6);  
CREATE BROKER PRIORITY [//Adventure-Works.com/Expenses/BasePriority]  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = ANY,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 3);  

4. 서비스를 사용하여 대상 서비스의 세 가지 우선 순위 수준 만들기

세 가지 성능 수준인 금(높음), 은(중간), 동(낮음)을 제공하는 시스템을 지원합니다. 계약은 하나지만 각 수준마다 별도의 시작자 서비스가 있습니다. 모든 시작자 서비스는 중앙 대상 서비스와 통신합니다.

CREATE BROKER PRIORITY GoldInitToTargetPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = GoldInitiatorService,  
         REMOTE_SERVICE_NAME = N'TargetService',  
         PRIORITY_LEVEL = 6);  
CREATE BROKER PRIORITY GoldTargetToInitPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = TargetService,  
         REMOTE_SERVICE_NAME = N'GoldInitiatorService',  
         PRIORITY_LEVEL = 6);  
CREATE BROKER PRIORITY SilverInitToTargetPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = SilverInitiatorService,  
         REMOTE_SERVICE_NAME = N'TargetService',  
         PRIORITY_LEVEL = 4);  
CREATE BROKER PRIORITY SilverTargetToInitPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = TargetService,  
         REMOTE_SERVICE_NAME = N'SilverInitiatorService',  
         PRIORITY_LEVEL = 4);  
CREATE BROKER PRIORITY BronzeInitToTargetPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = BronzeInitiatorService,  
         REMOTE_SERVICE_NAME = N'TargetService',  
         PRIORITY_LEVEL = 2);  
CREATE BROKER PRIORITY BronzeTargetToInitPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SimpleContract,  
         LOCAL_SERVICE_NAME = TargetService,  
         REMOTE_SERVICE_NAME = N'BronzeInitiatorService',  
         PRIORITY_LEVEL = 2);  

5. 계약을 사용하여 여러 서비스의 세 가지 우선 순위 수준 만들기

세 가지 성능 수준인 금(높음), 은(중간), 동(낮음)을 제공하는 시스템을 지원합니다. 각 수준은 별도의 계약을 가집니다. 이러한 우선 순위는 해당 계약을 사용하는 대화에서 참조하는 모든 서비스에 적용됩니다.

CREATE BROKER PRIORITY GoldPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = GoldContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 6);  
CREATE BROKER PRIORITY SilverPriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = SilverContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 4);  
CREATE BROKER PRIORITY BronzePriority  
    FOR CONVERSATION  
    SET (CONTRACT_NAME = BronzeContract,  
         LOCAL_SERVICE_NAME = ANY,  
         REMOTE_SERVICE_NAME = ANY,  
         PRIORITY_LEVEL = 2);  

ALTER BROKER PRIORITY (TRANSACT-SQL)
BEGIN DIALOG CONVERSATION (TRANSACT-SQL)
계약 (TRANSACT-SQL) 만들기
큐 (TRANSACT-SQL) 만들기
서비스 (TRANSACT-SQL) 만들기
DROP BROKER PRIORITY (TRANSACT-SQL)
GET CONVERSATION GROUP (TRANSACT-SQL)
수신 (TRANSACT-SQL)
송신 (TRANSACT-SQL)
sys.conversation_priorities (TRANSACT-SQL)

커뮤니티 추가 항목

추가
표시: