Perutean Microsoft SQL Server Service Broker

Berlaku untuk: SQL Server Azure SQL Managed Instance

Topik ini menjelaskan detail bagaimana Service Broker merutekan pesan. Untuk gambaran umum, lihat Rute.

Untuk sebagian besar aplikasi, pendekatan sederhana untuk perutean Service Broker berfungsi dengan baik. Di setiap database yang berisi layanan, tentukan rute untuk layanan eksternal yang berkomunikasi dengan layanan. Namun, Service Broker menyediakan sistem perutean canggih untuk menangani kasus di mana aplikasi membutuhkan perilaku yang lebih kompleks. Untuk contoh yang mengilustrasikan proses perutean, lihat Contoh Perutean Broker Layanan.

Deskripsi Proses Perutean

SQL Server mempertahankan dua tingkat informasi perutean yang berbeda. Setiap database berisi tabel perutean lokal, sys.routes, untuk percakapan yang dimulai dalam database tersebut. Untuk percakapan yang berasal dari instans SQL Server, SQL Server mencari tabel perutean dalam database yang membuat percakapan. Untuk percakapan yang tiba dari luar instans, SQL Server mencari msdb.sys.routes.

Proses pencocokan dasar identik apakah percakapan berasal dari instans atau di luar instans. Proses ini mengabaikan rute yang telah kedaluwarsa. Proses perutean terdiri dari tiga langkah berbeda:

  1. Menemukan rute yang cocok. Service Broker menemukan serangkaian rute yang mungkin dengan mencocokkan nama layanan dan pengidentifikasi Service Broker.

  2. Memilih rute. Service Broker memilih rute dari antara serangkaian rute yang mungkin.

  3. Menemukan layanan tujuan. Ketika rute yang dipilih menentukan 'LOCAL' sebagai alamat jaringan, Service Broker menemukan layanan dalam instans. Jika layanan tidak ada dalam instans, Service Broker mungkin kembali ke langkah 2 dan memilih rute lain.

Ketika pesan telah dikirim dari inisiator ke target dan inisiator menerima pesan pengakuan dari target, inisiator menggunakan pengidentifikasi Service Broker dalam pesan pengakuan untuk merutekan pesan berikutnya ke target yang sama. Service Broker menangani pesan pengakuan; prosesnya transparan terhadap aplikasi yang menggunakan Service Broker. Untuk informasi selengkapnya tentang pesan pengakuan, lihat Protokol Komunikasi Service Broker.

Membalas Pesan Dari Layanan Target

Ketika pesan yang tiba dari luar instans berasal dari layanan target, SQL Server memeriksa untuk melihat apakah instans saat ini berisi pengidentifikasi Service Broker dalam pesan. Jika demikian, maka pesan dikirimkan dalam instans saat ini seperti yang dijelaskan dalam "Menemukan Layanan Tujuan." Jika tidak, SQL Server mengikuti proses pencocokan standar.

Menemukan Rute yang Cocok

Prosedur berikut menjelaskan bagaimana SQL Server cocok dengan rute. Pada setiap langkah, jika satu atau beberapa rute cocok, proses pencocokan berakhir, dan Service Broker memilih salah satu rute yang cocok sebagai berikut:

  1. Jika percakapan menentukan pengidentifikasi Service Broker, temukan rute dengan kecocokan yang tepat untuk nama layanan dan pengidentifikasi Service Broker.

  2. Temukan kecocokan yang tepat untuk nama layanan di antara rute yang tidak menentukan pengidentifikasi Service Broker.

  3. Jika percakapan tidak menentukan pengidentifikasi Service Broker, temukan kecocokan yang tepat untuk nama layanan di antara rute yang menentukan pengidentifikasi Service Broker. Jika tabel perutean berisi rute yang cocok dengan nama layanan dan memiliki pengidentifikasi Service Broker yang berbeda, pilih pengidentifikasi Service Broker secara acak. Kemudian, cocokkan hanya rute yang menggunakan pengidentifikasi Service Broker tersebut.

  4. Jika rute ke layanan perutean dinamis ada, dan tidak ada permintaan rute ke layanan yang tertunda, tandai percakapan tertunda dan minta informasi perutean dari layanan tersebut.

  5. Temukan rute yang menentukan nama layanan maupun pengidentifikasi Service Broker.

  6. Jika percakapan menentukan pengidentifikasi Service Broker dan jika instans berisi satu atau beberapa database yang berisi layanan dengan nama yang cocok dengan nama yang ditentukan dalam percakapan, rutekan percakapan seolah-olah tabel perutean berisi rute dengan nama layanan dan alamat jaringan 'LOKAL'.

  7. Tandai percakapan tertunda.

Ketika percakapan ditandai tertunda, Service Broker melakukan proses pencocokan lagi setelah periode waktu habis. Perhatikan bahwa kegagalan untuk menemukan rute yang cocok tidak dianggap sebagai kesalahan.

Memilih Rute

Jika proses pencocokan menemukan lebih dari satu rute yang cocok, Service Broker memilih satu rute dari antara rute yang cocok. Untuk tujuan ini, rute yang memiliki pengidentifikasi Service Broker, nama layanan, dan alamat jaringan yang sama dianggap identik. Service Broker menggunakan prosedur berikut untuk memilih rute yang tepat. Pada setiap langkah, proses berlanjut pada langkah berikutnya jika tidak ada rute yang cocok dengan spesifikasi alamat untuk langkah tersebut.

  1. Pilih satu rute dari antara rute yang menentukan alamat cermin.

  2. Pilih satu rute dari antara rute yang menentukan 'LOCAL' sebagai alamat jaringan. Jika instans SQL Server ini tidak berisi layanan yang cocok dengan nama yang ditentukan dalam percakapan, lanjutkan pada langkah 3.

  3. Pilih satu rute dari antara rute yang menentukan alamat jaringan.

  4. Pilih satu rute dari antara rute yang menentukan 'TRANSPORT' sebagai alamat jaringan.

Jika penerusan broker tidak aktif, Service Broker menjatuhkan pesan jika percakapan tidak berasal dari instans saat ini dan alamat rute yang dipilih bukan 'LOCAL'.

Menemukan Layanan Tujuan

Seperti yang dijelaskan sebelumnya, Service Broker mengirimkan pesan ke layanan dalam instans saat ini ketika rute yang cocok menentukan 'LOCAL' sebagai alamat jaringan. Untuk pesan yang berasal dari luar instans, rute harus berada di msdb.sys.routes. Untuk pesan yang berasal dari instans, rute yang cocok harus berada di tabel sys.routes untuk database yang memulai percakapan.

Ketika Service Broker menentukan bahwa layanan untuk pesan ada dalam instans saat ini, Service Broker harus menemukan layanan dalam instans. Ketika pengidentifikasi Service Broker untuk percakapan ada dalam percakapan atau rute, Service Broker mengirimkan pesan ke database yang diidentifikasi oleh pengidentifikasi Service Broker.

Jika tidak, Service Broker menemukan layanan dengan terlebih dahulu mencari nama layanan dalam database yang berisi percakapan. Kemudian, ia mencari nama layanan di database lain dalam instans. Service Broker mengirimkan pesan ke layanan pertama yang terletak. Namun, perhatikan bahwa urutan Service Broker mencari database lain dalam suatu instans tidak ditentukan, dan tidak dijamin konsisten dari percakapan ke percakapan. Ini berarti bahwa jika lebih dari satu salinan layanan target ada dalam instans, Service Broker secara acak memilih layanan untuk ditargetkan.

Pertimbangan lainnya

Untuk meningkatkan keandalan, perutean Service Broker berisi perlindungan terhadap perulangan perutean. Perutean Service Broker mengetahui pencerminan database, dan dapat secara transparan mengalihkan percakapan ke mitra aktif database yang dicerminkan.

Perulangan Perutean

Penerusan pesan Service Broker melacak berapa kali pesan telah diteruskan untuk melindungi dari perulangan perutean tanpa akhir. Untuk informasi selengkapnya, lihat Penerusan Pesan Broker Layanan.

Jika rute yang cocok berisi alamat jaringan yang diselesaikan ke instans saat ini, SQL Server memperlakukan percakapan seolah-olah percakapan berasal dari luar instans. Service Broker merutekan pesan untuk percakapan menggunakan rute di msdb.sys.routes. Perutean untuk pesan ini identik dengan perutean pesan dari luar instans. Secara khusus, penerusan pesan harus aktif bagi Service Broker untuk meneruskan pesan ke alamat jaringan selain 'LOKAL'.

Alamat Cermin

Rute dengan alamat cermin memiliki prioritas tertinggi saat memilih rute dari antara serangkaian rute pencocokan awal. Namun, Service Broker tidak memberikan pertimbangan khusus untuk mencerminkan alamat saat menemukan rute yang cocok untuk percakapan.

Ketika Service Broker memilih rute yang menentukan alamat cermin, dan Service Broker sebelumnya belum mengirimkan pesan menggunakan rute, Service Broker mengirimkan permintaan ke kedua alamat untuk menentukan instans mana yang saat ini menjadi utama. Ketika Service Broker mengidentifikasi perwakilan, Service Broker mengirim semua pesan yang menggunakan rute ke utama tanpa menghubungi instans cermin. Jika perwakilan tidak dapat dijangkau, atau instans tersebut menunjukkan bahwa itu bukan lagi prinsipal, Service Broker mengirim pesan ke alamat lain untuk pasangan tersebut jika instans SQL Server di alamat lain menunjukkan bahwa itu adalah perwakilan baru.

Dalam kasus di mana Service Broker tidak dapat menjangkau perwakilan tetapi mitra tidak mengklaim sebagai prinsipal baru, Service Broker tidak mengirim pesan ke mitra. Service Broker kemudian mencoba kembali alamat utama dan alamat mitra sampai perwakilan dapat dijangkau, atau mitra menunjukkan bahwa sekarang menjadi utama. Dengan mengambil pendekatan ini, Service Broker dengan andal mengirimkan pesan ketika perwakilan dan mitra dapat berkomunikasi, tetapi instans yang mengirim pesan tidak dapat mencapai prinsipal.

Lihat juga