Bagikan melalui


BUAT PRIORITAS BROKER (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Menentukan tingkat prioritas dan serangkaian kriteria untuk menentukan percakapan Service Broker mana yang akan ditetapkan tingkat prioritasnya. Tingkat prioritas ditetapkan ke titik akhir percakapan apa pun yang menggunakan kombinasi kontrak dan layanan yang sama yang ditentukan dalam prioritas percakapan. Prioritas berkisar dalam nilai dari 1 (rendah) hingga 10 (tinggi). Bawaan adalah 5.

Konvensi sintaks transact-SQL

Sintaksis

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

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

ConversationPriorityName
Menentukan nama untuk prioritas percakapan ini. Nama harus unik dalam database saat ini, dan harus sesuai dengan aturan untuk pengidentifikasi Mesin Database.

SET
Menentukan kriteria untuk menentukan apakah prioritas percakapan berlaku untuk percakapan. Jika ditentukan, SET harus berisi setidaknya satu kriteria: CONTRACT_NAME, LOCAL_SERVICE_NAME, REMOTE_SERVICE_NAME, atau PRIORITY_LEVEL. Jika SET tidak ditentukan, default diatur untuk ketiga kriteria.

CONTRACT_NAME = {ContractName | ANY}
Menentukan nama kontrak yang akan digunakan sebagai kriteria untuk menentukan apakah prioritas percakapan berlaku untuk percakapan. ContractName adalah pengidentifikasi Mesin Database, dan harus menentukan nama kontrak dalam database saat ini.

ContractName
Menentukan bahwa prioritas percakapan hanya dapat diterapkan ke percakapan di mana pernyataan BEGIN DIALOG yang memulai percakapan yang ditentukan PADA CONTRACT ContractName.

ANY
Menentukan bahwa prioritas percakapan dapat diterapkan ke percakapan apa pun, terlepas dari kontrak mana yang digunakannya.

Defaultnya adalah ANY.

LOCAL_SERVICE_NAME = {LocalServiceName | ANY}
Menentukan nama layanan yang akan digunakan sebagai kriteria untuk menentukan apakah prioritas percakapan berlaku untuk titik akhir percakapan.

LocalServiceName adalah pengidentifikasi Mesin Database. Ini harus menentukan nama layanan dalam database saat ini.

LocalServiceName
Menentukan bahwa prioritas percakapan dapat diterapkan ke hal berikut:

  • Setiap titik akhir percakapan inisiator yang nama layanan inisiatornya cocok dengan LocalServiceName.

  • Setiap titik akhir percakapan target yang nama layanan targetnya cocok dengan LocalServiceName.

ANY

  • Menentukan bahwa prioritas percakapan dapat diterapkan ke titik akhir percakapan apa pun, terlepas dari nama layanan lokal yang digunakan oleh titik akhir.

Defaultnya adalah ANY.

REMOTE_SERVICE_NAME = {'RemoteServiceName' | ANY}
Menentukan nama layanan yang akan digunakan sebagai kriteria untuk menentukan apakah prioritas percakapan berlaku untuk titik akhir percakapan.

RemoteServiceName adalah literal jenis nvarchar(256). Service Broker menggunakan perbandingan byte-byte untuk mencocokkan string RemoteServiceName . Perbandingan peka huruf besar/kecil dan tidak mempertimbangkan kolate saat ini. Layanan target dapat berada dalam instans Mesin Database saat ini, atau instans jarak jauh Mesin Database.

'RemoteServiceName'
Menentukan bahwa prioritas percakapan dapat diterapkan ke hal berikut:

  • Setiap titik akhir percakapan inisiator yang nama layanan target terkaitnya cocok dengan RemoteServiceName.

  • Setiap titik akhir percakapan target yang nama layanan inisiator terkaitnya cocok dengan RemoteServiceName.

ANY
Menentukan bahwa prioritas percakapan dapat diterapkan ke titik akhir percakapan apa pun, terlepas dari nama layanan jarak jauh yang terkait dengan titik akhir.

Defaultnya adalah ANY.

PRIORITY_LEVEL = { PriorityValue | DEFAULT }
Menentukan prioritas untuk menetapkan titik akhir percakapan apa pun yang menggunakan kontrak dan layanan yang ditentukan dalam prioritas percakapan. PriorityValue harus berupa bilangan bulat harfiah dari 1 (prioritas terendah) hingga 10 (prioritas tertinggi). Bawaan adalah 5.

Keterangan

Service Broker menetapkan tingkat prioritas ke titik akhir percakapan. Tingkat prioritas mengontrol prioritas operasi yang terkait dengan titik akhir. Setiap percakapan memiliki dua titik akhir percakapan:

  • Titik akhir percakapan inisiator mengaitkan satu sisi percakapan dengan layanan inisiator dan antrean inisiator. Titik akhir percakapan inisiator dibuat saat pernyataan BEGIN DIALOG dijalankan. Operasi yang terkait dengan titik akhir percakapan inisiator meliputi:

    • Mengirim dari layanan inisiator.

    • Menerima dari antrean inisiator.

    • Mendapatkan grup percakapan berikutnya dari antrean inisiator.

  • Titik akhir percakapan target mengaitkan sisi lain percakapan dengan layanan dan antrean target. Titik akhir percakapan target dibuat saat percakapan digunakan untuk mengirim pesan ke antrean target. Operasi yang terkait dengan titik akhir percakapan target meliputi:

    • Menerima dari antrean target.

    • Mengirim dari layanan target.

    • Mendapatkan grup percakapan berikutnya dari antrean target.

Service Broker menetapkan tingkat prioritas percakapan saat titik akhir percakapan dibuat. Titik akhir percakapan mempertahankan tingkat prioritas hingga percakapan berakhir. Prioritas atau perubahan baru pada prioritas yang ada tidak diterapkan ke percakapan yang sudah ada.

Service Broker menetapkan titik akhir percakapan tingkat prioritas dari prioritas percakapan yang kriteria kontrak dan layanannya paling cocok dengan properti titik akhir. Tabel berikut ini memperlihatkan prioritas kecocokan:

Kontrak operasi Operasi layanan lokal Operasi layanan jarak jauh
ContractName LocalServiceName RemoteServiceName
ContractName LocalServiceName ANY
ContractName ANY RemoteServiceName
ContractName ANY ANY
ANY LocalServiceName RemoteServiceName
ANY LocalServiceName ANY
ANY ANY RemoteServiceName
ANY ANY ANY

Service Broker terlebih dahulu mencari prioritas yang kontrak, layanan lokal, dan layanan jarak jauh yang ditentukan cocok dengan yang digunakan operasi. Jika tidak ditemukan, Service Broker mencari prioritas dengan kontrak dan layanan lokal yang cocok dengan yang digunakan operasi, dan di mana layanan jarak jauh ditentukan sebagai ANY. Ini berlanjut untuk semua variasi yang tercantum dalam tabel prioritas. Jika tidak ada kecocokan yang ditemukan, operasi diberi prioritas default 5.

Service Broker secara independen menetapkan tingkat prioritas untuk setiap titik akhir percakapan. Agar Service Broker menetapkan tingkat prioritas ke titik akhir percakapan inisiator dan target, Anda harus memastikan bahwa kedua titik akhir dicakup oleh prioritas percakapan. Jika inisiator dan titik akhir percakapan target berada dalam database terpisah, Anda harus membuat prioritas percakapan di setiap database. Tingkat prioritas yang sama biasanya ditentukan untuk kedua titik akhir percakapan untuk percakapan, tetapi Anda dapat menentukan tingkat prioritas yang berbeda.

Tingkat prioritas selalu diterapkan ke operasi yang menerima pesan atau pengidentifikasi grup percakapan dari antrean. Tingkat prioritas juga diterapkan saat mengirimkan pesan dari satu instans Mesin Database ke instans lain.

Tingkat prioritas tidak digunakan saat mengirimkan pesan:

  • Dari database tempat opsi database HONOR_BROKER_PRIORITY diatur ke NONAKTIF. Untuk informasi selengkapnya, lihat MENGUBAH Opsi SET DATABASE (Transact-SQL).

  • Antara layanan dalam instans mesin database yang sama.

  • Semua operasi Service Broker dalam database diberi prioritas default 5 jika tidak ada prioritas percakapan yang dibuat dalam database.

Izin

Izin untuk membuat prioritas percakapan default kepada anggota peran database tetap db_ddladmin atau db_owner, dan peran server tetap sysadmin. Memerlukan izin UBAH pada database.

Contoh

J. Menetapkan tingkat prioritas ke kedua arah percakapan.

Kedua prioritas percakapan ini memastikan bahwa semua operasi yang menggunakan SimpleContract antara TargetService dan InitiatorAService yang ditetapkan prioritas tingkat 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);  

B. Mengatur tingkat prioritas untuk semua percakapan yang menggunakan kontrak

Menetapkan tingkat 7 prioritas untuk semua operasi yang menggunakan kontrak bernama SimpleContract. Ini mengasumsikan bahwa tidak ada prioritas lain yang menentukan dan SimpleContract baik layanan lokal atau jarak jauh.

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

C. Mengatur tingkat prioritas dasar untuk database.

Menentukan prioritas percakapan untuk dua layanan tertentu, lalu menentukan prioritas percakapan yang akan cocok dengan semua titik akhir percakapan lainnya. Ini tidak menggantikan prioritas default, yang selalu 5, tetapi meminimalkan jumlah item yang ditetapkan default.

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. Membuat tiga tingkat prioritas untuk layanan target dengan menggunakan layanan

Mendukung sistem yang menyediakan tiga tingkat performa: Emas (tinggi), Perak (sedang), dan Perunggu (rendah). Ada satu kontrak, tetapi setiap tingkat memiliki layanan inisiator terpisah. Semua layanan inisiator berkomunikasi dengan layanan target pusat.

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. Membuat tiga tingkat prioritas untuk beberapa layanan menggunakan kontrak

Mendukung sistem yang menyediakan tiga tingkat performa: Emas (tinggi), Perak (sedang), dan Perunggu (rendah). Setiap tingkat memiliki kontrak terpisah. Prioritas ini berlaku untuk layanan apa pun yang dirujuk oleh percakapan yang menggunakan kontrak.

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

Lihat Juga

ALTER BROKER PRIORITY (Transact-SQL)
MULAI PERCAKAPAN DIALOG (Transact-SQL)
BUAT KONTRAK (T-SQL)
BUAT ANTREAN (Transact-SQL)
CREATE SERVICE (Transact-SQL)
DROP BROKER PRIORITY (Transact-SQL)
DAPATKAN GRUP PERCAKAPAN (Transact-SQL)
RECEIVE (Transact-SQL)
SEND (Transact-SQL)
sys.conversation_priorities (T-SQL)