Bagikan melalui


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.

Konvensi sintaks transact-SQL

Sintaksis

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 }

Catatan

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

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 dipertahankan
1=Siap untuk menerima
2=Belum selesai
3=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=Kosong
N=Tidak ada
X=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 ExpenseWorkFileGroupfile .

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