CREATE BROKER PRIORITY (Transact-SQL)

Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği

Öncelik seviyesini ve hangi Hizmet Brokerı konuşmalarının öncelik seviyesini atanmasını sağlamak için kriterler setini tanımlar. Öncelik seviyesi, konuşma önceliğinde belirtilen aynı sözleşme ve hizmet kombinasyonunu kullanan herhangi bir konuşma uç noktasına atanır. Öncelikler 1 (düşük) ile 10 (yüksek) arasında değişir. Varsayılan değer 5'tir.

Transact-SQL söz dizimi kuralları

Syntax

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 } ]  
       )  
]  
[;]  
  

Arguments

ConversationPriorityName
Bu konuşma önceliğinin adını belirtir. İsim, mevcut veritabanında benzersiz olmalı ve Database Engine tanımlayıcıları için gereken kurallara uygun olmalıdır.

SET
Konuşma önceliğinin bir konuşmaya uygulanıp uygulanmadığını belirlemek için kriterleri belirler. Belirtilirse, SET en az bir kriter içermelidir: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME veya PRIORITY_LEVEL. Belirtilmediyse SET , üç kriter için varsayılan ayarlar belirlenir.

CONTRACT_NAME = {ContractName | ANY}
Bir sözleşmenin adını belirtir; görüşme önceliğinin bir konuşmaya uygulanıp uygulanmadığını belirlemek için kriter olarak kullanılır. ContractName bir Database Engine tanımlayıcısıdır ve mevcut veritabanında bir sözleşmenin adını belirtmelidir.

Sözleşme Adı
Konuşma önceliğinin yalnızca konuşmayı başlatan BEGIN DIALOG ifadesinin ON CONTRACTContractName belirttiği konuşmalara uygulanabileceğini belirtir.

ANY
Konuşma önceliğinin, hangi sözleşmeyi kullanırsa kullansın herhangi bir konuşmaya uygulanabileceğini belirtir.

Varsayılan HER TÜR.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Bir hizmetin adını, konuşma önceliğinin bir konuşma uç noktasına uygulanıp uygulanmadığını belirlemek için bir kriter olarak belirtir.

LocalServiceName bir Database Engine tanımlayıcısıdır. Mevcut veritabanında bir hizmetin adını belirtmelidir.

LocalServiceName
Konuşma önceliğinin aşağıdakilere uygulanabileceğini belirtir:

  • Başlatıcı hizmet adı LocalServiceName ile eşleşen herhangi bir başlatıcı konuşma uç noktası.

  • Hedef hizmet adı LocalServiceName ile eşleşen herhangi bir hedef konuşma uç noktası.

ANY

  • Konuşma önceliğinin, uç noktanın kullandığı yerel hizmetin adından bağımsız olarak herhangi bir konuşma uç noktasına uygulanabileceğini belirtir.

Varsayılan HER TÜR.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | HERHANGI BIRİ}
Bir hizmetin adını, konuşma önceliğinin bir konuşma uç noktasına uygulanıp uygulanmadığını belirlemek için bir kriter olarak belirtir.

RemoteServiceNamenvarchar(256) tipinin kelime harbidir. Service Broker, RemoteServiceName dizesini eşleştirmek için bayt bayt karşılaştırma kullanır. Karşılaştırma büyük harf duyarlıdır ve mevcut derleme dikkate alınmaz. Hedef hizmet, mevcut Database Engine örneğinde veya uzak bir Database Engine örneğinde olabilir.

'Uzaktan Hizmet Adı'
Konuşma önceliğinin aşağıdakilere uygulanabileceğini belirtir:

  • Bağlantılı hedef hizmet adı RemoteServiceName ile eşleşen herhangi bir başlatıcı konuşma uç noktası.

  • İlgili başlatıcı hizmet adı RemoteServiceName ile eşleşen herhangi bir hedef konuşma uç noktası.

ANY
Konuşma önceliğinin, uç noktaya bağlı uzak hizmetin adından bağımsız olarak herhangi bir konuşma uç noktasına uygulanabileceğini belirtir.

Varsayılan HER TÜR.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Konuşma önceliğinde belirtilen sözleşmeleri ve hizmetleri kullanan herhangi bir konuşma uç noktasına atamanın önceliğini belirtir. PriorityValue , 1 (en düşük öncelik) ile 10 (en yüksek öncelik) arasında tam sayı literal olmalıdır. Varsayılan değer 5'tir.

Remarks

Service Broker, konuşma uç noktalarına öncelik seviyeleri atar. Öncelik seviyeleri, uç noktayla ilişkili işlemlerin önceliğini kontrol eder. Her konuşmanın iki konuşma uç noktası vardır:

  • Başlatıcı konuşma uç noktası, konuşmanın bir tarafını başlatıcı hizmeti ve başlatıcı kuyruğuyla ilişkilendirir. Başlatıcı konuşma uç noktası, BEGIN DIALOG ifadesi çalıştırıldığında oluşturulur. Başlatıcı konuşma uç noktasına ilişkin işlemler şunlardır:

    • Başlatıcı hizmetten göndermeler.

    • Başlatıcı kuyruğundan alır.

    • Başlatıcı kuyruğundan bir sonraki sohbet grubunu almak.

  • Hedef konuşma uç noktası, konuşmanın diğer tarafını hedef hizmet ve kuyrukla ilişkilendirir. Hedef konuşma uç noktası, konuşma hedef kuyruğuna mesaj göndermek için kullanıldığında oluşturulur. Hedef konuşma uç noktasına ilişkin işlemler şunlardır:

    • Hedef kuyruğundan alır.

    • Hedef servisinden göndermeler.

    • Hedef kuyruğundan bir sonraki sohbet grubunu almak.

Hizmet Aracısı, konuşma uç noktaları oluşturulduğunda konuşma öncelik düzeylerini atar. Konuşma uç noktası, konuşma bitene kadar öncelik düzeyini korur. Yeni öncelikler veya mevcut önceliklerde yapılan değişiklikler mevcut konuşmalara uygulanmaz.

Service Broker, bir konuşma uç noktasına, sözleşme ve hizmet kriterleri uç noktanın özelliklerine en uygun olan konuşma önceliğinden öncelik seviyesini atar. Aşağıdaki tabloda eşleşme önceliği gösterilmektedir:

İşletme sözleşmesi Yerel hizmet operasyonu Uzaktan hizmet operasyonu
Sözleşme Adı LocalServiceName RemoteServiceName
Sözleşme Adı LocalServiceName ANY
Sözleşme Adı ANY RemoteServiceName
Sözleşme Adı ANY ANY
ANY LocalServiceName RemoteServiceName
ANY LocalServiceName ANY
ANY ANY RemoteServiceName
ANY ANY ANY

Service Broker önce, belirli sözleşmesi, yerel hizmet ve uzaktan hizmeti operasyonun kullandığı öncelikle eşleşen bir önceliği arar. Eğer bir hizmet bulunamazsa, Service Broker, operasyonun kullandığı ve uzaktan hizmetin ANY olarak belirtildiği bir sözleşme ve yerel hizmetle öncelik arar. Bu, öncelik tablosunda listelenen tüm varyasyonlar için devam eder. Eşleşme bulunmazsa, operasyona varsayılan öncelik 5 olarak atanır.

Service Broker, her konuşma uç noktasına bağımsız olarak bir öncelik seviyesi atar. Hizmet Aracısı'nın hem başlatıcıya hem de hedef konuşma uç noktalarına öncelik düzeyleri atamasını sağlamak için, her iki uç noktanın da konuşma öncelikleri kapsamında olduğundan emin olmanız gerekir. Başlatıcı ve hedef konuşma uç noktaları ayrı veritabanlarındaysa, her veritabanında konuşma öncelikleri oluşturmanız gerekir. Aynı öncelik seviyesi genellikle bir konuşmanın her iki konuşma uç noktası için de belirtilir, ancak farklı öncelik seviyeleri de belirtebilirsiniz.

Öncelik düzeyleri her zaman kuyruktan ileti veya konuşma grubu tanımlayıcıları alan işlemlere uygulanır. Öncelik seviyeleri, Database Engine'in bir örneğinden diğerine mesaj iletirken de uygulanır.

Mesaj iletilirken öncelik seviyeleri kullanılmaz:

  • HONOR_BROKER_PRIORITY veritabanı seçeneğinin KAPALı olduğu bir veritabanından. Daha fazla bilgi için bkz ALTER DATABASE SET . Seçenekler (Transact-SQL).

  • Aynı Database Engine örneğindeki servisler arasında.

  • Veritabanındaki tüm Service Broker işlemlerine, veritabanında herhangi bir konuşma önceliği oluşturulmamışsa varsayılan öncelik olarak 5 olarak atanır.

Permissions

Konuşma önceliği oluşturma izni, varsayılan olarak db_ddladmin veya db_owner sabit veritabanı rollerinin üyelerine ve sysadmin sabit sunucu rolüne aitti. Veritabanında ALTER izni gerektirir.

Examples

A. Bir konuşmanın her iki yönüne öncelik seviyesi atanmak.

Bu iki konuşma önceliği, between TargetService ve 'i InitiatorAService kullanan SimpleContract tüm operasyonların öncelik seviyesi 3'e atanmasını sağlar.

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);  

B. Sözleşme kullanılan tüm konuşmalar için öncelik seviyesinin belirlenmesi

Bir sözleşme olan SimpleContracttüm işlemlere öncelik seviyesi atar7. Bu, her ikisini SimpleContract de belirten başka önceliklerin olmadığını, yerel veya uzaktan hizmet olduğunu varsayar.

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

C. Bir veritabanı için temel öncelik seviyesi belirlemek.

İki özel hizmet için konuşma önceliklerini tanımlar, ardından diğer tüm konuşma uç noktalarıyla eşleşecek bir konuşma önceliği tanımlar. Bu, varsayılan önceliğin (her zaman 5 olan) yerini almaz, ancak varsayılan öğe sayısını en aza indirir.

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);  

D. Hizmetler kullanılarak hedef hizmet için üç öncelik seviyesi oluşturmak

Üç performans seviyesi sağlayan bir sistemi destekler: Altın (yüksek), Gümüş (orta) ve Bronz (düşük). Bir sözleşme var, ancak her seviyenin ayrı bir başlatıcı servisi vardır. Tüm başlatıcı hizmetler merkezi bir hedef servisle iletişim kurar.

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);  

E. Sözleşmeler kullanılarak birden fazla hizmet için üç öncelik seviyesi oluşturulması

Üç performans seviyesi sağlayan bir sistemi destekler: Altın (yüksek), Gümüş (orta) ve Bronz (düşük). Her seviyenin ayrı bir sözleşmesi vardır. Bu öncelikler, sözleşmeleri kullanan görüşmelerde referans verilen tüm hizmetler için geçerlidir.

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);  

Ayrıca Bkz.

ALTER BROKER PRIORITY (Transact-SQL)
BEGIN DIALOG CONVERSATION (Transact-SQL)
CREATE CONTRACT (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
DROP BROKER PRIORITY (Transact-SQL)
GET CONVERSATION GROUP (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
sys.conversation_priorities (Transact-SQL) - Konuşma öncelikleri sistemi (Transact-SQL)