Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server
Azure SQL Managed Instance
Mengirim pesan, menggunakan satu atau beberapa percakapan yang sudah ada.
Sintaks
SEND
ON CONVERSATION [(]conversation_handle [,.. @conversation_handle_n][)]
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
[ ; ]
Argumen
PADA CONVERSATION_HANDLE PERCAKAPAN [.. @conversation_handle_n]
Menentukan percakapan tempat pesan berada.
conversation_handle harus berisi pengidentifikasi percakapan yang valid. Handel percakapan yang sama tidak dapat digunakan lebih dari sekali.
MESSAGE TYPE
message_type_name
Menentukan tipe pesan pesan terkirim. Jenis pesan ini harus disertakan dalam kontrak layanan yang digunakan oleh percakapan ini. Kontrak ini harus memungkinkan jenis pesan dikirim dari sisi percakapan ini. Misalnya, layanan target percakapan hanya dapat mengirim pesan yang ditentukan dalam kontrak sebagai TARGET SENT BY atau DIKIRIM OLEH ANY. Jika klausa ini dihilangkan, pesan tersebut berjenis DEFAULTpesan .
message_body_expression
Menyediakan ekspresi yang mewakili isi pesan.
message_body_expression bersifat opsional. Namun, jika message_body_expression ada ekspresi harus dari jenis yang dapat dikonversi ke varbinary(max). Ekspresi tidak boleh NULL. Jika klausa ini dihilangkan, isi pesan kosong.
Keterangan
Penting
Jika SEND pernyataan bukan pernyataan pertama dalam batch atau prosedur tersimpan, pernyataan sebelumnya harus diakhiri dengan titik koma (;).
Pernyataan tersebut SEND mengirimkan pesan dari layanan di satu ujung dari satu atau beberapa percakapan Pialang Layanan ke layanan di ujung lain dari percakapan ini. Pernyataan kemudian RECEIVE digunakan untuk mengambil pesan yang dikirim dari antrean yang terkait dengan layanan target.
Handel percakapan yang disediakan ke klausul ON CONVERSATION berasal dari salah satu dari tiga sumber:
Saat pesan terkirim tidak merespons pesan yang diterima dari layanan lain, gunakan handel percakapan yang kembali dari pernyataan BEGIN DIALOG yang membuat percakapan.
Saat pesan terkirim adalah respons terhadap pesan yang sebelumnya diterima dari layanan lain, gunakan pegangan percakapan yang dikembalikan oleh RECEIVE pernyataan yang mengembalikan pesan asli.
Kode yang berisi SEND pernyataan terkadang terpisah dari kode yang berisi DIALOG BEGIN atau RECEIVE pernyataan yang menyediakan pegangan percakapan. Dalam kasus ini, pegangan percakapan harus menjadi salah satu item data dalam informasi status yang diteruskan ke kode yang berisi SEND pernyataan.
Pesan yang dikirim ke layanan dalam instans lain dari Mesin Database SQL Server disimpan dalam antrean transmisi dalam database saat ini hingga dapat ditransmisikan ke antrean layanan dalam instans jarak jauh. Pesan yang dikirim ke layanan dalam instans yang sama dari Mesin Database dimasukkan langsung ke dalam antrean yang terkait dengan layanan ini. Jika kondisi mencegah pesan lokal langsung masuk ke antrean layanan target, antrean transmisi dapat menyimpannya hingga kondisi selesai. Contoh kemunculan ini mencakup beberapa jenis kesalahan atau antrean layanan target yang tidak aktif. Anda dapat menggunakan tampilan sistem sys.transmission_queue untuk melihat pesan dalam antrean transmisi.
SEND adalah pernyataan atom. Jika SEND pernyataan mengirim pesan pada beberapa percakapan dan gagal, seperti saat percakapan dalam status error, tidak ada pesan yang disimpan dalam antrean transmisi atau dimasukkan ke dalam antrean layanan target apa pun.
Service Broker mengoptimalkan penyimpanan dan transmisi pesan yang dikirim pada beberapa percakapan dalam pernyataan yang sama SEND .
Pesan dalam antrean transmisi untuk instans dikirimkan secara berurutan berdasarkan:
Tingkat prioritas titik akhir percakapan terkait.
Dalam tingkat prioritas, urutan pengiriman mereka dalam percakapan.
Tingkat prioritas yang ditentukan dalam prioritas percakapan hanya diterapkan ke pesan dalam antrean transmisi jika opsi database HONOR_BROKER_PRIORITY diatur ke AKTIF. Jika HONOR_BROKER_PRIORITY diatur ke NONAKTIF, semua pesan dalam antrean transmisi untuk database tersebut akan diberi tingkat prioritas default 5. Tingkat prioritas tidak diterapkan ke tempat SEND pesan dimasukkan langsung ke antrean layanan dalam instans yang sama dari Database Engine.
Pernyataan tersebut SEND secara terpisah mengunci setiap percakapan tempat pesan dikirim untuk memastikan pengiriman yang dipesan per percakapan.
SEND tidak valid dalam fungsi yang ditentukan pengguna.
Izin
Untuk mengirim pesan, pengguna saat ini harus memiliki RECEIVE izin pada antrean setiap layanan yang mengirim pesan.
Contoh
Contoh berikut memulai dialog dan mengirim pesan XML pada dialog. Untuk mengirim pesan, contoh mengonversi objek xml menjadi varbinary(max).
DECLARE @dialog_handle UNIQUEIDENTIFIER,
@ExpenseReport XML;
SET @ExpenseReport = <construct message as appropriate for the application>;
BEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing];
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense](@ExpenseReport);
Contoh berikut memulai tiga dialog dan mengirim pesan XML pada masing-masing dialog.
DECLARE
@dialog_handle1 UNIQUEIDENTIFIER,
@dialog_handle2 UNIQUEIDENTIFIER,
@dialog_handle3 UNIQUEIDENTIFIER,
@OrderMsg XML;
SET @OrderMsg = '<construct message as appropriate for the application>';
BEGIN DIALOG @dialog_handle1
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB1/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle2
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB2/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle3
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB3/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
SEND ON CONVERSATION (
@dialog_handle1,
@dialog_handle2,
@dialog_handle3
)
MESSAGE TYPE [//AllDBs/OrderMsg](@OrderMsg);
Lihat Juga
BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
sys.transmission_queue (T-SQL)