Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği
Bir veritabanında yeni bir kuyruk oluşturur. Kuyruklar mesajları depolar. Bir hizmet için mesaj geldiğinde, Service Broker mesajı hizmetle ilişkili kuyruğa koyar.
Transact-SQL söz dizimi kuralları
Syntax
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 }
Arguments
database_name (nesne)
Yeni kuyruğun oluşturulacağı veritabanının adıdır. database_name mevcut veritabanının adını belirtmelidir. database_name sağlanmadığında, kuyruk mevcut veritabanında oluşturulur.
schema_name (nesne)
Yeni kuyruğun ait olduğu şemanın adıdır. Şema, ifadeyi çalıştıran kullanıcı için varsayılan şemaya göre varsayılan olarak kullanılır. Eğer bu ifade, CREATE QUEUEdatabase_name tarafından belirtilen veritabanındaki sabit sunucu rolünün bir üyesi veya db_dbowner veya db_ddladmin sabit veritabanı rolünün bir üyesi tarafından yürütülüyorsa, schema_name mevcut bağlantının girişiyle ilişkilendirilen şema dışında bir şema belirtebilir. Aksi takdirde, schema_name ifadeyi çalıştıran kullanıcı için varsayılan şema olmalıdır.
queue_name
Oluşturulacak kuyruğun adı bu. Bu isim, SQL Server tanımlayıcıları için gereken yönergelere uygun olmalıdır.
DURUM (Kuyruğu)
Kuyruğun kullanılabilir (ON) veya KAPALı olup olmadığını belirtir. Kuyruk kullanılamazsa, kuyruğa mesaj eklenemez veya kuyruğun içinden çıkarılamaz. Kuyruğu, mesajların kuyruğun içine ulaşmasını önlemek için kullanılabilir olmayan bir durumda oluşturabilirsiniz, ta ki kuyruk bir ALTER QUEUE ifadeyle kullanılabilir hale getirilene kadar. Bu madde çıkarılırsa, varsayılan ONUR'dur ve kuyruk kullanılabilir olur.
TUTMA
Kuyruk için saklama ayarını belirler. RETENTION = ONİyse, bu kuyruğu kullanan konuşmalarda gönderilen veya alınan tüm mesajlar, konuşmalar sona erene kadar kuyrakta tutulur. Bu, mesajları denetim amacıyla saklamanızı veya hata olursa telafi işlemleri gerçekleştirebilmenize olanak tanır. Bu madde belirtilmemişse, saklama ayarı varsayılan olarak OFF olur.
Note
RETENTION = ON olarak ayarlamak performansı düşürebilir. Bu ayar yalnızca uygulama için gerekliyse kullanılmalıdır.
ETKİNLEŞTİRME
Bu kuyruk içindeki mesajları işlemeye başlamak için hangi depolanmış prosedürün kaydedilmesi gerektiğine dair bilgileri belirtir.
DURUM (Aktivasyon)
Service Broker'ın depolanmış prosedürü başlatıp başlatmayacağını belirtir. STATUS = ON'da, kuyruk PROCEDURE_NAME ile belirtilen saklanan prosedürü başlatır; şu anda çalışan prosedür sayısı MAX_QUEUE_READERS'den az ve mesajlar kuyruğa daha hızlı ulaştığında, saklanan prosedürler mesaj aldığından daha hızlı gelir. STATUS = KAPALı olduğunda, kuyruk saklanan prosedürü başlatmaz. Bu madde belirtilmemişse, varsayılan AÇIKTIR.
PROCEDURE_NAME = <prosedür>
Bu kuyruk içindeki mesajları işlemeye başlamak için saklanan prosedürün adını belirtir. Bu değer bir SQL Server tanımlayıcısı olmalıdır.
database_name(prosedür) Depolanan prosedürü içeren veritabanının adıdır.
schema_name(prosedür) Depolanan prosedürü içeren şemanın adıdır.
procedure_name Saklanan prosedürün adıdır.
MAX_QUEUE_READERS =max_readers
Kuyruğun aynı anda başladığı aktivasyon depolanan prosedürün maksimum örneklerini belirtir. max_readers değeri 0 ile 32767 arasında bir sayı olmalıdır.
EXECUTE AS
Aktivasyon prosedürünün çalıştığı SQL Server veritabanı kullanıcı hesabını belirtir. SQL Server, kuyruk depolanan prosedür başladığında bu kullanıcının izinlerini kontrol edebilmelidir. Bir alan kullanıcısı için, prosedür başlatıldığında veya aktivasyon başarısız olduğunda sunucu alan alanına bağlı olmalıdır. Bir SQL Server kullanıcısı için sunucu her zaman izinleri kontrol edebilir.
SELF, saklanan prosedürün mevcut kullanıcı olarak çalıştığını belirtir. (Bu CREATE QUEUE ifadeyi yürüten veritabanı prüdürü.)
'user_name' Saklanan prosedürün çalıştırdığı kullanıcının adıdır. user_name parametresi, SQL Server tanımlayıcı olarak belirtilen geçerli bir SQL Server kullanıcısı olmalıdır. Mevcut kullanıcı, belirtilen user_name için KIMSE iznine sahip olmalıdır.
OWNER, saklanan prosedürün kuyruğun sahibi olarak çalıştırıldığını belirtir.
POISON_MESSAGE_HANDLING
Kuyruk için zehirli mesaj işlemenin etkin olup olmadığını belirtir. Varsayılan değer ON'dır.
Zehir mesajı işleme KAPALı olarak ayarlanmış bir kuyruk, beş ardışık işlem geri dönüşünden sonra devre dışı bırakılmaz. Bu, uygulama tarafından özel bir zehir mesajı işleme sisteminin tanımlanmasına olanak tanır.
DOSYA grubu | []DEFAULT
Bu kuyruğun oluşturulacağı SQL Server dosya grubunu belirtir. Dosya grubu parametresini bir dosya grubunu tanımlamak için kullanabilir veya tanımlayıcıyı hizmet brokeri veritabanı için varsayılan dosya grubunu kullanmak için kullanabilirsiniz DEFAULT . Bu madde bağlamında, DEFAULT anahtar kelime değildir ve tanımlayıcı olarak sınırlandırılmalıdır. Dosya grubu belirtilmediğinde, kuyruk veritabanı için varsayılan dosya grubunu kullanır.
Remarks
Bir kuyruk SELECT ifadesinin hedefi olabilir. Ancak, bir kuyruğun içeriği yalnızca Service Broker konuşmalarında çalışan ifadeler kullanılarak değiştirilebilir, örneğin SEND, RECEIVE, ve END CONVERSATION. Bir kuyruk, veya TRUNCATE ifadesinin INSERTUPDATEDELETEhedefi olamaz.
Bir kuyruk geçici bir nesne olmayabilir. Bu nedenle, kuyruk isimleri geçersiz # olur.
Aktif olmayan bir durumda kuyruk oluşturmak, mesajların kuyrukta alınmasına izin vermeden önce bir hizmet altyapısını kurmanızı sağlar.
Service Broker, kuyruk üzerinde mesaj olmadığında aktivasyon işlemlerini durdurmaz. Bir aktivasyon saklanan prosedür, kısa bir süre boyunca kuyruk üzerinde mesaj bulunmadığında çıkmalıdır.
Aktivasyon depolanan prosedürün izinleri, Service Broker depolanmış prosedürü başlattığında kontrol edilir, kuyruk oluşturulduğunda değil. Bu CREATE QUEUE ifade, maddede belirtilen kullanıcının EXECUTE AS NAME maddesinde belirtilen PROCEDURE saklanan prosedürü yürütme iznine sahip olup olmadığını doğrulamaz.
Bir kuyruk kullanılamazsa, Service Broker, veritabanı için iletim kuyruğunda kuyruğu kullanan servisler için mesajları tutar. Katalog görünümü, sys.transmission_queue iletim kuyruğunun görünümünü sunar.
Kuyruk şema sahibi bir nesnedir. Kuyruklar katalog görünümünde sys.objects görünür.
Aşağıdaki tablo, kuyruktaki sütunları listeler.
| Sütun adı | Veri türü | Description |
|---|---|---|
status |
tinyint | İletinin durumu. Bu ifade RECEIVE , 1 durumuna sahip tüm mesajları döndürür. Mesaj tutma açıksa, durum 0 olarak ayarlanır. Mesaj tutma kapalıysa, mesaj kuyruğun üzerinden silinir. Kuyruk içindeki mesajlar aşağıdaki değerlerden birini içerebilir:0=Alınan mesaj saklandı1=Kabul etmeye hazır2=Henüz tamamlanmadı3=Gönderilen mesajı tutuldu |
priority |
tinyint | Bu mesaja atanan öncelik seviyesi. |
queuing_order |
bigint | Kuyruk içindeki mesaj sipariş numarası. |
conversation_group_id |
uniqueidentifier | Bu mesajın ait olduğu konuşma grubunun tanımlayıcısı. |
conversation_handle |
uniqueidentifier | Bu mesajın parçası olduğu konuşma için kullanıcı adı. |
message_sequence_number |
bigint | Konuşmadaki mesajın sıra numarası. |
service_name |
nvarchar(128) | Konuşmanın yapılacağı hizmetin adı. |
service_id |
int | Konuşmanın yapıldığı hizmetin SQL Server nesne tanımlayıcısı. |
service_contract_name |
nvarchar(128) | Konuşmanın takip ettiği sözleşmenin adı. |
service_contract_id |
int | Konuşmanın takip ettiği sözleşmenin SQL Server nesne tanımlayıcısı. |
message_type_name |
nvarchar(128) | Mesajı tanımlayan mesaj türünün adı. |
message_type_id |
int | Mesajı tanımlayan mesaj tipine ait SQL Server nesne tanımlayıcısı. |
validation |
nchar(2) | Mesaj için kullanılan doğrulama.E=BoşN=YokX=XML |
message_body |
varbinary(max) | İletinin içeriği. |
message_enqueue_time |
datetime | Mesajın sıraya girdiği zaman. |
Permissions
Kuyruk oluşturma izni, sabit veritabanı rollerinin üyelerini db_ddladmindb_owner veya sysadmin sabit sunucu rolünü kullanır.
REFERENCESKuyruk için izin, varsayılan olarak kuyruğun sahibine, sabit veritabanı rollerinin db_owner üyelerine db_ddladmin veya sabit sysadmin sunucu rolünün üyelerine aitti.
RECEIVE Kuyruk için izin, varsayılan olarak kuyruğun sahibine, sabit db_owner veritabanı rolünün üyelerine veya sabit sysadmin sunucu rolünün üyelerine verilir.
Examples
A. Parametresiz bir kuyruk oluştur
Aşağıdaki örnek, mesajları almak için kullanılabilir bir kuyruk oluşturur. Kuyruk için herhangi bir aktivasyon kaydedilmiş prosedürü belirtilmemiştir.
CREATE QUEUE ExpenseQueue;
B. Erişilmez bir kuyruk oluştur
Aşağıdaki örnek, mesaj almak için kullanılamayan bir kuyruk oluşturur. Kuyruk için herhangi bir aktivasyon kaydedilmiş prosedürü belirtilmemiştir.
CREATE QUEUE ExpenseQueue WITH STATUS=OFF;
C. Bir kuyruk oluşturun ve iç aktivasyon bilgilerini belirtin
Aşağıdaki örnek, mesajları almak için kullanılabilir bir kuyruk oluşturur. Kuyruk saklanan prosedürü expense_procedure bir mesaj kuyruğa girdiğinde başlatır. Saklanan prosedür kullanıcı ExpenseUserolarak çalıştırılır. Kuyruk depolanan prosedürün maksimum 5 örneklerini başlatır.
CREATE QUEUE ExpenseQueue
WITH STATUS=ON,
ACTIVATION (
PROCEDURE_NAME = expense_procedure
, MAX_QUEUE_READERS = 5
, EXECUTE AS 'ExpenseUser' );
D. Belirli bir dosya grubunda kuyruk oluşturun
Aşağıdaki örnek, dosya grubunda ExpenseWorkFileGroupbir kuyruk oluşturur.
CREATE QUEUE ExpenseQueue
ON ExpenseWorkFileGroup;
E. Birden fazla parametreli bir kuyruk oluşturun
Aşağıdaki örnek, dosya grubunda DEFAULT bir kuyruk oluşturur. Kuyruk kullanılamaz. Mesajlar, ait oldukları konuşma sona erene kadar kuyrukta tutulur. Kuyruk ile ALTER QUEUEerişilebilir hale getirildiğinde, kuyruk mesajları işlemek için saklanan prosedürü AdventureWorks2022.dbo.expense_procedure başlatır. Saklanan prosedür, ifadeyi CREATE QUEUE çalıştıran kullanıcı olarak çalıştırılır. Kuyruk depolanan prosedürün maksimum 10 örneklerini başlatır.
CREATE QUEUE ExpenseQueue
WITH STATUS = OFF
, RETENTION = ON
, ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.expense_procedure
, MAX_QUEUE_READERS = 10
, EXECUTE AS SELF )
ON [DEFAULT];