Service Broker

Berlaku untuk:SQL ServerAzure SQL Managed Instance

SQL Server Service Broker memberikan dukungan asli untuk olahpesan dan antrean di SQL Server Database Engine dan Azure SQL Managed Instance. Pengembang dapat dengan mudah membuat aplikasi canggih yang menggunakan komponen Mesin Database untuk berkomunikasi antara database yang berbeda, dan membangun aplikasi terdistribusi dan andal.

Kapan menggunakan Service Broker

Gunakan komponen Service Broker untuk menerapkan fungsionalitas pemrosesan pesan asinkron dalam database asli. Pengembang aplikasi yang menggunakan Service Broker dapat mendistribusikan beban kerja data di beberapa database tanpa memprogram komunikasi dan olahpesan internal yang kompleks. Service Broker mengurangi pekerjaan pengembangan dan pengujian karena Service Broker menangani jalur komunikasi dalam konteks percakapan. Ini juga meningkatkan performa. Misalnya, database front-end yang mendukung situs Web dapat merekam informasi dan mengirim tugas intensif proses ke antrean dalam database back-end. Service Broker memastikan bahwa semua tugas dikelola dalam konteks transaksi untuk memastikan keandalan dan konsistensi teknis.

Gambaran Umum

Service Broker adalah kerangka kerja pengiriman pesan yang memungkinkan Anda membuat aplikasi berorientasi layanan dalam database asli. Tidak seperti fungsionalitas pemrosesan kueri klasik yang terus membaca data dari tabel dan memprosesnya selama siklus hidup kueri, dalam aplikasi berorientasi layanan, Anda memiliki layanan database yang bertukar pesan. Setiap layanan memiliki antrean tempat pesan ditempatkan hingga diproses.

Service broker

Pesan dalam antrean dapat diambil menggunakan perintah Transact-SQL RECEIVE atau dengan prosedur aktivasi yang akan dipanggil setiap kali pesan tiba dalam antrean.

Membuat layanan

Layanan database dibuat dengan menggunakan pernyataan CREATE SERVICE Transact SQL. Layanan dapat dikaitkan dengan antrean pesan yang dibuat dengan menggunakan pernyataan CREATE QUEUE :

CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
    ON QUEUE dbo.ExpenseQueue; 

Mengirim pesan

Pesan dikirim pada percakapan antara layanan menggunakan pernyataan SEND Transact-SQL. Percakapan adalah saluran komunikasi yang dibuat antara layanan menggunakan BEGIN DIALOG pernyataan Transact-SQL.

DECLARE @dialog_handle UNIQUEIDENTIFIER;

BEGIN DIALOG @dialog_handle  
FROM SERVICE ExpensesClient  
TO SERVICE 'ExpensesService';  
  
SEND ON CONVERSATION @dialog_handle (@Message) ;  

Pesan akan dikirim ke ExpenssesService dan ditempatkan di dbo.ExpenseQueue. Karena tidak ada prosedur aktivasi yang terkait dengan antrean ini, pesan akan tetap dalam antrean sampai seseorang membacanya.

Memproses pesan

Pesan yang ditempatkan dalam antrean dapat dipilih dengan menggunakan kueri standar SELECT . Pernyataan SELECT tidak akan mengubah antrean dan menghapus pesan. Untuk membaca dan menarik pesan dari antrean, Anda dapat menggunakan pernyataan RECEIVE Transact-SQL.

RECEIVE conversation_handle, message_type_name, message_body  
FROM ExpenseQueue; 

Setelah memproses semua pesan dari antrean, Anda harus menutup percakapan menggunakan pernyataan END CONVERSATION Transact-SQL.

Di mana dokumentasi untuk Service Broker?

Dokumentasi referensi untuk Service Broker disertakan dalam dokumentasi SQL Server. Dokumentasi referensi ini mencakup bagian berikut:

Lihat dokumentasi yang diterbitkan sebelumnya untuk konsep Service Broker dan untuk tugas pengembangan dan manajemen. Dokumentasi ini tidak direproduksi dalam dokumentasi SQL Server karena sejumlah kecil perubahan dalam Service Broker dalam versi terbaru SQL Server.

Apa yang baru di Service Broker

Broker layanan dan Azure SQL Managed Instance

Pertukaran pesan broker layanan lintas instans antara instans Azure SQL Managed Instance dan pertukaran pesan antara SQL Server dan Azure SQL Manage Instance saat ini dalam pratinjau publik:

  • CREATE ROUTE: Port yang ditentukan harus 4022. Lihat MEMBUAT RUTE.
  • ALTER ROUTE: Port yang ditentukan harus 4022. Lihat MENGUBAH RUTE.

Keamanan transportasi didukung, keamanan dialog tidak:

  • CREATE REMOTE SERVICE BINDING tidak didukung.

Broker layanan diaktifkan secara default dan tidak dapat dinonaktifkan. Opsi ALTER DATABSE berikut ini tidak didukung:

  • ENABLE_BROKER
  • DISABLE_BROKER

Tidak ada perubahan signifikan yang diperkenalkan di SQL Server 2019 (15.x). Perubahan berikut diperkenalkan di SQL Server 2012 (11.x).

Pesan dapat dikirim ke beberapa layanan target (multicast)

Sintaks pernyataan SEND (Transact-SQL) telah diperluas untuk mengaktifkan multicast dengan mendukung beberapa handel percakapan.

Antrean mengekspos waktu antrean pesan

Antrean memiliki kolom baru, message_enqueue_time, yang menunjukkan berapa lama pesan berada dalam antrean.

Penanganan pesan racun dapat dinonaktifkan

Pernyataan CREATE QUEUE (Transact-SQL) dan ALTER QUEUE (Transact-SQL) sekarang memiliki kemampuan untuk mengaktifkan atau menonaktifkan penanganan pesan racun dengan menambahkan klausa, POISON_MESSAGE_HANDLING (STATUS = ON | OFF). Tampilan katalog sys.service_queues sekarang memiliki kolom is_poison_message_handling_enabled untuk menunjukkan apakah pesan racun diaktifkan atau dinonaktifkan.

Dukungan AlwaysOn di Service Broker

Untuk informasi selengkapnya, lihat Service Broker dengan Grup Ketersediaan AlwaysOn (SQL Server).

Langkah berikutnya

Penggunaan Service Broker yang paling umum adalah untuk pemberitahuan peristiwa. Pelajari cara menerapkan pemberitahuan peristiwa, mengonfigurasi keamanan dialog, atau mendapatkan informasi selengkapnya.