BUAT ANTREAN (Transact-SQL)
Berlaku untuk: SQL Server Azure SQL Managed Instance
Membuat antrean baru dalam database. Antrean menyimpan pesan. Ketika pesan tiba untuk layanan, Service Broker menempatkan pesan pada antrean yang terkait dengan layanan.
Sintaks
CREATE QUEUE <object>
[ WITH
[ STATUS = { ON | OFF } [ , ] ]
[ RETENTION = { ON | OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON | OFF } , ]
PROCEDURE_NAME = <procedure> ,
MAX_QUEUE_READERS = max_readers ,
EXECUTE AS { SELF | 'user_name' | OWNER }
) [ , ] ]
[ POISON_MESSAGE_HANDLING (
[ STATUS = { ON | OFF } ] ) ]
]
[ ON { filegroup | [ DEFAULT ] } ]
[ ; ]
<object> ::=
{ database_name.schema_name.queue_name | schema_name.queue_name | queue_name }
<procedure> ::=
{ database_name.schema_name.stored_procedure_name | schema_name.stored_procedure_name | stored_procedure_name }
Argumen
database_name (objek)
Adalah nama database untuk membuat antrean baru. database_name harus menentukan nama database yang sudah ada. Ketika database_name tidak disediakan, antrean dibuat dalam database saat ini.
schema_name (objek)
Adalah nama skema tempat antrean baru berada. Skema default ke skema default untuk pengguna yang menjalankan pernyataan. Jika pernyataan CREATE QUEUE dijalankan oleh anggota peran server tetap sysadmin, atau anggota peran database tetap db_dbowner atau db_ddladmin dalam database yang ditentukan oleh database_name, schema_name dapat menentukan skema selain yang terkait dengan login koneksi saat ini. Jika tidak, schema_name harus menjadi skema default untuk pengguna yang menjalankan pernyataan.
queue_name
Adalah nama antrean yang akan dibuat. Nama ini harus memenuhi panduan untuk pengidentifikasi SQL Server.
STATUS (Antrean)
Menentukan apakah antrean tersedia (AKTIF) atau tidak tersedia (NONAKTIF). Ketika antrean tidak tersedia, tidak ada pesan yang dapat ditambahkan ke antrean atau dihapus dari antrean. Anda dapat membuat antrean dalam status tidak tersedia untuk menjaga agar pesan tidak sampai pada antrean hingga antrean tersedia dengan pernyataan ALTER QUEUE. Jika klausa ini dihilangkan, defaultnya adalah AKTIF, dan antrean tersedia.
RETENSI
Menentukan pengaturan retensi untuk antrean. Jika RETENSI = AKTIF, semua pesan yang dikirim atau diterima pada percakapan yang menggunakan antrean ini dipertahankan dalam antrean hingga percakapan berakhir. Ini memungkinkan Anda menyimpan pesan untuk tujuan audit, atau untuk melakukan kompensasi transaksi jika terjadi kesalahan. Jika klausa ini tidak ditentukan, pengaturan retensi default ke NONAKTIF.
Catatan
Pengaturan RETENSI = AKTIF dapat mengurangi performa. Pengaturan ini hanya boleh digunakan jika diperlukan untuk aplikasi.
AKTIVASI
Menentukan informasi tentang prosedur tersimpan mana yang harus Anda mulai memproses pesan dalam antrean ini.
STATUS (Aktivasi)
Menentukan apakah Service Broker memulai prosedur tersimpan. Ketika STATUS = AKTIF, antrean memulai prosedur tersimpan yang ditentukan dengan PROCEDURE_NAME ketika jumlah prosedur yang saat ini berjalan kurang dari MAX_QUEUE_READERS dan ketika pesan tiba pada antrean lebih cepat daripada prosedur tersimpan menerima pesan. Saat STATUS = NONAKTIF, antrean tidak memulai prosedur tersimpan. Jika klausa ini tidak ditentukan, defaultnya adalah AKTIF.
PROCEDURE_NAME = <prosedur>
Menentukan nama prosedur tersimpan untuk mulai memproses pesan dalam antrean ini. Nilai ini harus berupa pengidentifikasi SQL Server.
database_name(prosedur) Adalah nama database yang berisi prosedur tersimpan.
schema_name(prosedur) Adalah nama skema yang berisi prosedur tersimpan.
procedure_name Adalah nama prosedur tersimpan.
MAX_QUEUE_READERS =max_readers
Menentukan jumlah maksimum instans prosedur tersimpan aktivasi yang dimulai antrean secara bersamaan. Nilai max_readers harus berupa angka antara 0 dan 32767.
JALANKAN SEBAGAI
Menentukan akun pengguna database SQL Server tempat prosedur tersimpan aktivasi berjalan. SQL Server harus dapat memeriksa izin untuk pengguna ini pada saat antrean memulai prosedur tersimpan. Untuk pengguna domain, server harus tersambung ke domain saat prosedur dimulai atau aktivasi gagal. Untuk pengguna SQL Server, server selalu dapat memeriksa izin.
SELF Menentukan bahwa prosedur tersimpan dijalankan sebagai pengguna saat ini. (Prinsipal database yang menjalankan pernyataan CREATE QUEUE ini.)
'user_name' Adalah nama pengguna yang menjalankan prosedur tersimpan. Parameter user_name harus merupakan pengguna SQL Server yang valid yang ditentukan sebagai pengidentifikasi SQL Server. Pengguna saat ini harus memiliki izin IMPERSONATE untuk user_name yang ditentukan.
OWNER Menentukan bahwa prosedur tersimpan dijalankan sebagai pemilik antrean.
POISON_MESSAGE_HANDLING
Menentukan apakah penanganan pesan racun diaktifkan untuk antrean. Defaultnya adalah ON.
Antrean yang memiliki penanganan pesan racun yang diatur ke NONAKTIF tidak akan dinonaktifkan setelah lima pembatalan transaksi berturut-turut. Hal ini memungkinkan sistem handing pesan racun kustom didefinisikan oleh aplikasi.
ON filegroup | [DEFAULT]
Menentukan grup file SQL Server tempat membuat antrean ini. Anda dapat menggunakan parameter grup file untuk mengidentifikasi grup file, atau menggunakan pengidentifikasi DEFAULT untuk menggunakan grup file default untuk database broker layanan. Dalam konteks klausul ini, DEFAULT bukan kata kunci, dan harus dibatasi sebagai pengidentifikasi. Ketika tidak ada grup file yang ditentukan, antrean menggunakan grup file default untuk database.
Keterangan
Antrean dapat menjadi target pernyataan SELECT. Namun, konten antrean hanya dapat dimodifikasi menggunakan pernyataan yang beroperasi pada percakapan Service Broker, seperti SEND, RECEIVE, dan END CONVERSATION. Antrean tidak dapat menjadi target pernyataan INSERT, UPDATE, DELETE, atau TRUNCATE.
Antrean mungkin bukan objek sementara. Oleh karena itu, nama antrean yang dimulai dengan # tidak valid.
Membuat antrean dalam status tidak aktif memungkinkan Anda menerapkan infrastruktur untuk layanan sebelum mengizinkan pesan diterima pada antrean.
Service Broker tidak menghentikan prosedur tersimpan aktivasi ketika tidak ada pesan pada antrean. Prosedur tersimpan aktivasi harus keluar ketika tidak ada pesan yang tersedia pada antrean untuk waktu yang singkat.
Izin untuk prosedur tersimpan aktivasi diperiksa ketika Service Broker memulai prosedur tersimpan, bukan ketika antrean dibuat. Pernyataan CREATE QUEUE tidak memverifikasi bahwa pengguna yang ditentukan dalam klausul EXECUTE AS memiliki izin untuk menjalankan prosedur tersimpan yang ditentukan dalam klausul PROCEDURE NAME.
Ketika antrean tidak tersedia, Service Broker menyimpan pesan untuk layanan yang menggunakan antrean dalam antrean transmisi untuk database. Tampilan sys.transmission_queue
katalog menyediakan tampilan antrean transmisi.
Antrean adalah objek milik skema. Antrean muncul dalam sys.objects
tampilan katalog.
Tabel berikut mencantumkan kolom dalam antrean.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
status |
kecil | Status pesan. Pernyataan RECEIVE mengembalikan semua pesan yang memiliki status 1. Jika retensi pesan aktif, statusnya kemudian diatur ke 0. Jika retensi pesan nonaktif, pesan akan dihapus dari antrean. Pesan dalam antrean dapat berisi salah satu nilai berikut:0 =Pesan diterima yang dipertahankan1 =Siap untuk menerima2 =Belum selesai3 =Pesan terkirim yang dipertahankan |
priority |
kecil | Tingkat prioritas yang ditetapkan ke pesan ini. |
queuing_order |
bigint | Nomor pesanan dalam antrean. |
conversation_group_id |
pengidentifikasi unik | Pengidentifikasi untuk grup percakapan tempat pesan ini berada. |
conversation_handle |
pengidentifikasi unik | Tangani untuk percakapan yang menjadi bagian pesan ini. |
message_sequence_number |
bigint | Nomor urutan pesan dalam percakapan. |
service_name |
nvarchar(128) | Nama layanan tempat percakapan berada. |
service_id |
int | Pengidentifikasi objek SQL Server dari layanan tempat percakapan berada. |
service_contract_name |
nvarchar(128) | Nama kontrak yang diikuti percakapan. |
service_contract_id |
int | Pengidentifikasi objek SQL Server dari kontrak yang diikuti percakapan. |
message_type_name |
nvarchar(128) | Nama jenis pesan yang menjelaskan pesan. |
message_type_id |
int | Pengidentifikasi objek SQL Server dari jenis pesan yang menjelaskan pesan. |
validation |
nchar(2) | Validasi yang digunakan untuk pesan.E =KosongN =Tidak adaX =XML |
message_body |
varbinary(max) | Konten pesan. |
message_enqueue_time |
datetime | Waktu ketika pesan diantrekan. |
Izin
Izin untuk membuat antrean menggunakan anggota db_ddladmin
db_owner
atau peran database tetap, atau sysadmin
peran server tetap.
REFERENCES
izin untuk antrean default kepada pemilik antrean, anggota db_ddladmin
peran database tetap, atau db_owner
anggota sysadmin
peran server tetap.
RECEIVE
izin untuk antrean default kepada pemilik antrean, anggota db_owner
peran database tetap, atau anggota sysadmin
peran server tetap.
Contoh
J. Membuat antrean tanpa parameter
Contoh berikut membuat antrean yang tersedia untuk menerima pesan. Tidak ada prosedur tersimpan aktivasi yang ditentukan untuk antrean.
CREATE QUEUE ExpenseQueue;
B. Membuat antrean yang tidak tersedia
Contoh berikut membuat antrean yang tidak tersedia untuk menerima pesan. Tidak ada prosedur tersimpan aktivasi yang ditentukan untuk antrean.
CREATE QUEUE ExpenseQueue WITH STATUS=OFF;
C. Membuat antrean dan menentukan informasi aktivasi internal
Contoh berikut membuat antrean yang tersedia untuk menerima pesan. Antrean memulai prosedur expense_procedure
tersimpan saat pesan memasuki antrean. Prosedur tersimpan dijalankan sebagai pengguna ExpenseUser
. Antrean 5
memulai maksimum instans prosedur tersimpan.
CREATE QUEUE ExpenseQueue
WITH STATUS=ON,
ACTIVATION (
PROCEDURE_NAME = expense_procedure
, MAX_QUEUE_READERS = 5
, EXECUTE AS 'ExpenseUser' );
D. Membuat antrean pada grup file tertentu
Contoh berikut membuat antrean pada grup ExpenseWorkFileGroup
file .
CREATE QUEUE ExpenseQueue
ON ExpenseWorkFileGroup;
E. Membuat antrean dengan beberapa parameter
Contoh berikut membuat antrean pada DEFAULT
grup file. Antrean tidak tersedia. Pesan disimpan dalam antrean hingga percakapan miliknya berakhir. Ketika antrean tersedia melalui ALTER QUEUE
, antrean memulai prosedur AdventureWorks2022.dbo.expense_procedure
tersimpan untuk memproses pesan. Prosedur tersimpan dijalankan sebagai pengguna yang menjalankan CREATE QUEUE
pernyataan. Antrean 10
memulai maksimum instans prosedur tersimpan.
CREATE QUEUE ExpenseQueue
WITH STATUS = OFF
, RETENTION = ON
, ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.expense_procedure
, MAX_QUEUE_READERS = 10
, EXECUTE AS SELF )
ON [DEFAULT];