Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na:SQL ServerAzure
SQL Managed Instance
Vytvoří novou frontu v databázi. Fronty ukládají zprávy. Když dorazí zpráva pro službu, Service Broker ji umístí do fronty přiřazené k této službě.
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 (objekt)
je název databáze, ve které se nová fronta vytváří. database_name musí zadat název existující databáze. Pokud database_name není poskytnuto, fronta se vytvoří v aktuální databázi.
schema_name (objekt)
Je název schématu, do kterého nová fronta patří. Schéma ve výchozím nastavení nastavuje na výchozí schéma uživatele, který příkaz vykonává. Pokud CREATE QUEUE je příkaz vykonán členem role pevného serveru správce systému, nebo členem db_dbowner či db_ddladmin pevných databázových rolí v databázi specifikované database_name, může schema_name specifikovat jiné schéma než to, které je spojeno s přihlášením aktuálního připojení. Jinak musí být schema_name výchozím schématem pro uživatele, který příkaz vykonává.
queue_name
Je název fronty pro vytvoření. Tento název musí splňovat pokyny pro identifikátory SQL Server.
STAV (fronta)
Specifikuje, zda je fronta dostupná (ZAPNUTO) nebo nedostupná (VYPNUTO). Pokud fronta není dostupná, nelze do fronty přidat žádné zprávy ani je odstranit. Můžete vytvořit frontu v nedostupném stavu, aby zprávy nepřicházely do fronty, dokud nebude fronta dostupná příkazem ALTER QUEUE . Pokud je tato klauzule vynechána, výchozí je ZAPNUTO a fronta je dostupná.
UDRŽENÍ
Specifikuje nastavení udržení fronty. Pokud je RETENTION = ZAPNUTO, všechny zprávy odeslané nebo přijaté v konverzacích, které tuto frontu používají, zůstávají ve frontě až do ukončení konverzace. To vám umožní uchovávat zprávy pro účely auditu nebo pro kompenzační transakce v případě chyby. Pokud tato klauzule není specifikována, nastavení retention se ve výchozím nastavení nastaví na VYPNUTO.
Note
Nastavení RETENTION = ON může snížit výkon. Toto nastavení by mělo být použito pouze tehdy, pokud je pro danou aplikaci vyžadováno.
ACTIVATION
Specifikuje informace o tom, kterou uloženou proceduru musíte spustit pro zpracování zpráv v této frontě.
STAV (Aktivace)
Specifikuje, zda Service Broker spouští uloženou proceduru. Když je STATUS = ZAPNUTO, fronta zahajuje uloženou proceduru specifikovanou s PROCEDURE_NAME když je počet aktuálně běžících procedur menší než MAX_QUEUE_READERS a když zprávy dorazí do fronty rychleji, než přijímají uložené procedury. Když je STATUS = VYPNUTO, fronta nespustí uloženou proceduru. Pokud tato klauzule není specifikována, výchozí nastavení je ZAPNUTO.
PROCEDURE_NAME = <postup>
Specifikuje název uložené procedury pro zahájení zpracování zpráv v této frontě. Tato hodnota musí být identifikátor SQL Server.
database_name(procedura) je název databáze, která obsahuje uloženou proceduru.
schema_name(procedura) je název schématu, které obsahuje uloženou proceduru.
procedure_name Je název uložené procedury.
MAX_QUEUE_READERS =max_readers
Specifikuje maximální počet instancí aktivačního uloženého postupu, který fronta spustí současně. Hodnota max_readers musí být mezi 0 a 32767.
EXECUTE AS
Specifikuje uživatelský účet databáze SQL Server, pod kterým spouští aktivační uložená procedura. SQL Server musí být schopen zkontrolovat oprávnění tohoto uživatele v době, kdy fronta spustí uloženou proceduru. Pro uživatele domény musí být server připojen k doméně při zahájení procedury nebo selhání aktivace. Pro uživatele SQL Server může server vždy kontrolovat oprávnění.
SELF Specifikuje, že uložená procedura se vykonává jako aktuální uživatel. (Princip databáze, který toto CREATE QUEUE tvrzení vykonává.)
'user_name' je jméno uživatele, pod kterým se uložená procedura spouští. Parametr user_name musí být platný SQL Server uživatel je specifikován jako identifikátor SQL Server. Současný uživatel musí mít oprávnění vydávat se za PŘEDSTÍRÁNÍ pro specifikovanou user_name .
VLASTNÍK Specifikuje, že uložená procedura se vykonává jako vlastník fronty.
POISON_MESSAGE_HANDLING
Specifikuje, zda je pro frontu povoleno zpracování jedovatých zpráv. Výchozí hodnota je ZAPNUTÁ.
Fronta, která má nastavené řešení jedovatých zpráv na VYPNUTO, nebude po pěti po sobě jdoucích návratech transakcí zakázána. To umožňuje definovat vlastní systém manipulace s jedovatými zprávami aplikací aplikací.
ON souborová skupina | [DEFAULT]
Specifikuje skupinu souborů SQL Server, ve které se tato fronta vytváří. Můžete použít parametr souborové skupiny k identifikaci souborové skupiny, nebo použít DEFAULT identifikátor pro použití výchozí souborové skupiny pro databázi servisního brokera. V kontextu této klauzule DEFAULT není klíčové slovo a musí být vymezeno jako identifikátor. Pokud není specifikována žádná souborová skupina, fronta používá výchozí souborovou skupinu pro databázi.
Remarks
Fronta může být cílem příkazu SELECT. Obsah fronty však lze upravovat pouze pomocí příkazů, které pracují s konverzacemi Service Broker, jako jsou SEND, RECEIVE, a END CONVERSATION. Fronta nemůže být cílem příkazu INSERT, UPDATE, DELETE, nebo TRUNCATE.
Fronta nemusí být dočasným objektem. Proto názvy front začínající na nejsou # platné.
Vytvoření fronty v neaktivním stavu vám umožní připravit infrastrukturu pro službu dříve, než povolíte přijímání zpráv ve frontě.
Service Broker nezastavuje uložené procedury při aktivaci, pokud ve frontě nejsou žádné zprávy. Aktivační uložená procedura by měla ukončit provoz, když ve frontě po krátkou dobu nejsou žádné zprávy.
Oprávnění pro uloženou proceduru aktivace se kontrolují, když Service Broker spustí uloženou proceduru, nikoli při vytvoření fronty. Příkaz CREATE QUEUE neověřuje, že uživatel uvedený v klauzuli EXECUTE AS má oprávnění spustit uloženou proceduru specifikovanou v klauzuli PROCEDURE NAME.
Když fronta není dostupná, Service Broker uchovává zprávy pro služby, které frontu používají ve frontě přenosu databáze. Katalogový sys.transmission_queue pohled poskytuje pohled na frontu přenosu.
Fronta je objekt vlastněný schématem. Fronty se zobrazují v sys.objects zobrazení katalogu.
Následující tabulka uvádí sloupce ve frontě.
| Název sloupce | Datový typ | Description |
|---|---|---|
status |
tinyint | Stav zprávy Příkaz RECEIVE vrací všechny zprávy se stavem 1. Pokud je zapnutá retence zpráv, stav je nastaven na 0. Pokud je uchovávání zprávy vypnuté, zpráva je z fronty smazána. Zprávy ve frontě mohou obsahovat jednu z následujících hodnot:0=Přijatá zpráva si zapamatována1=Připraven k přijetí2=Ještě není dokončeno3=Zpráva zachovaná |
priority |
tinyint | Úroveň priority, která je této zprávě přiřazena. |
queuing_order |
bigint | Číslo pořadí zprávy ve frontě. |
conversation_group_id |
uniqueidentifier | Identifikátor konverzační skupiny, do které tato zpráva patří. |
conversation_handle |
uniqueidentifier | Připojte se k konverzaci, které je tato zpráva součástí. |
message_sequence_number |
bigint | Pořadové číslo zprávy v konverzaci. |
service_name |
nvarchar(128) | Název služby, se kterou se konverzace vede. |
service_id |
int | SQL Server identifikátor objektu služby, se kterou je konverzace vedena. |
service_contract_name |
nvarchar(128) | Název smlouvy, po které následuje konverzace. |
service_contract_id |
int | SQL Server identifikátor objektu smlouvy, po které konverzace probíhá. |
message_type_name |
nvarchar(128) | Název typu zprávy, který zprávu popisuje. |
message_type_id |
int | SQL Server identifikátor objektu typu zprávy, který zprávu popisuje. |
validation |
nchar(2) | Validace použitá pro zprávu.E=PrázdnéN=ŽádnéX=XML |
message_body |
varbinary(max) | Obsah zprávy |
message_enqueue_time |
datetime | Čas, kdy byla zpráva zařazena do fronty. |
Permissions
Oprávnění pro vytvoření fronty využívá členy db_ddladmindb_owner nebo pevných databázových rolí, nebo pevné sysadmin serverové role.
REFERENCES Oprávnění pro frontu je výchozí pro vlastníka fronty, členy db_ddladmin pevných databázových rolí nebo db_owner členy pevné sysadmin serverové role.
RECEIVE Oprávnění pro frontu je výchozí pro vlastníka fronty, členy db_owner pevné databázové role nebo členy pevné sysadmin serverové role.
Examples
A. Vytvořte frontu bez parametrů
Následující příklad vytváří frontu, která je dostupná pro příjem zpráv. Pro frontu není specifikována žádná aktivační uložená procedura.
CREATE QUEUE ExpenseQueue;
B. Vytvořte nedostupnou frontu
Následující příklad vytváří frontu, která není dostupná pro přijímání zpráv. Pro frontu není specifikována žádná aktivační uložená procedura.
CREATE QUEUE ExpenseQueue WITH STATUS=OFF;
C. Vytvořte frontu a zadejte interní aktivační informace
Následující příklad vytváří frontu, která je dostupná pro příjem zpráv. Fronta spustí uloženou proceduru expense_procedure , když do ní vstoupí zpráva. Uložená procedura se vykonává jako uživatel ExpenseUser. Fronta zahajuje maximální počet 5 instancí uložené procedury.
CREATE QUEUE ExpenseQueue
WITH STATUS=ON,
ACTIVATION (
PROCEDURE_NAME = expense_procedure
, MAX_QUEUE_READERS = 5
, EXECUTE AS 'ExpenseUser' );
D. Vytvořte frontu na konkrétní skupině souborů
Následující příklad vytváří frontu ve skupině ExpenseWorkFileGroupsouborů .
CREATE QUEUE ExpenseQueue
ON ExpenseWorkFileGroup;
E. Vytvořte frontu s více parametry
Následující příklad vytváří frontu ve skupině DEFAULT souborů. Fronta není dostupná. Zprávy zůstávají ve frontě až do konce konverzace, ke které patří. Když je fronta zpřístupněna prostřednictvím ALTER QUEUE, fronta spustí uloženou proceduru AdventureWorks2022.dbo.expense_procedure pro zpracování zpráv. Uložená procedura se vykoná jako uživatel, který příkaz CREATE QUEUE spustil. Fronta zahajuje maximální počet 10 instancí uložené procedury.
CREATE QUEUE ExpenseQueue
WITH STATUS = OFF
, RETENTION = ON
, ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.expense_procedure
, MAX_QUEUE_READERS = 10
, EXECUTE AS SELF )
ON [DEFAULT];