Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Managed Instance
Maakt een nieuwe wachtrij aan in een database. Wachtrijen slaan berichten op. Wanneer een bericht voor een dienst arriveert, plaatst Service Broker het bericht in de wachtrij die aan de service is gekoppeld.
Transact-SQL syntaxis-conventies
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 (object)
Is de naam van de database waarin de nieuwe wachtrij wordt aangemaakt. database_name moet de naam van een bestaande database opgeven. Wanneer database_name niet wordt geleverd, wordt de wachtrij aangemaakt in de huidige database.
schema_name (object)
Is de naam van het schema waartoe de nieuwe wachtrij behoort. Het schema is standaard het standaardschema voor de gebruiker die de instructie uitvoert. Als de CREATE QUEUE instructie wordt uitgevoerd door een lid van de sysadmin-vaste serverrol, of een lid van de db_dbowner of db_ddladmin vaste databaserollen in de database die door database_name is gespecificeerd, kan schema_name een schema specificeren dat anders is dan het schema dat is gekoppeld aan het inloggen van de huidige verbinding. Anders moet schema_name het standaardschema zijn voor de gebruiker die de instructie uitvoert.
queue_name
Is de naam van de wachtrij die gemaakt moet worden. Deze naam moet voldoen aan de richtlijnen voor SQL Server-identifiers.
STATUS (Wachtrij)
Geeft aan of de wachtrij beschikbaar is (AAN) of niet beschikbaar (UIT). Wanneer de wachtrij niet beschikbaar is, kunnen er geen berichten aan de wachtrij worden toegevoegd of uit de wachtrij worden verwijderd. Je kunt de wachtrij aanmaken in een niet-beschikbare staat om te voorkomen dat berichten in de wachtrij binnenkomen totdat de wachtrij beschikbaar is gemaakt met een ALTER QUEUE instructie. Als deze clausule wordt weggelaten, staat de standaard AAN en is de wachtrij beschikbaar.
RETENTIE
Specificeert de retentie-instelling voor de wachtrij. Als RETENTION = AAN, worden alle berichten die zijn verzonden of ontvangen op gesprekken die deze wachtrij gebruiken, in de wachtrij behouden totdat de gesprekken zijn beëindigd. Dit stelt je in staat berichten te bewaren voor auditdoeleinden, of om compensatietransacties uit te voeren als er een fout optreedt. Als deze clausule niet is gespecificeerd, staat de retentie-instelling standaard op UIT.
Opmerking
Het instellen van RETENTION = ON kan de prestaties verminderen. Deze instelling moet alleen worden gebruikt als het vereist is voor de applicatie.
ACTIVATION
Geeft informatie aan over welke opgeslagen procedure je moet starten om berichten in deze wachtrij te verwerken.
STATUS (Activatie)
Geeft aan of Service Broker de opgeslagen procedure start. Wanneer STATUS = ON, start de wachtrij de opgeslagen procedure gespecificeerd met PROCEDURE_NAME wanneer het aantal lopende procedures kleiner is dan MAX_QUEUE_READERS en wanneer berichten sneller in de wachtrij aankomen dan de opgeslagen procedures berichten ontvangen. Wanneer STATUS = UIT, start de wachtrij de opgeslagen procedure niet. Als deze clausule niet is gespecificeerd, staat de standaard AAN.
PROCEDURE_NAME = <procedure>
Specificeert de naam van de opgeslagen procedure om berichten in deze wachtrij te beginnen verwerken. Deze waarde moet een SQL Server-identificatie zijn.
database_name(procedure) Is de naam van de database die de opgeslagen procedure bevat.
schema_name(procedure) Is de naam van het schema dat de opgeslagen procedure bevat.
procedure_name Is de naam van de opgeslagen procedure.
MAX_QUEUE_READERS =max_readers
Specificeert het maximale aantal instanties van de activatie-opgeslagen procedure dat de wachtrij tegelijkertijd start. De waarde van max_readers moet een getal zijn tussen 0 en 32767.
EXECUTE AS
Specificeert het SQL Server-databasegebruikersaccount waaronder de activatie-opgeslagen procedure wordt uitgevoerd. SQL Server moet de rechten van deze gebruiker kunnen controleren op het moment dat de wachtrij de opgeslagen procedure start. Voor een domeingebruiker moet de server verbonden zijn met het domein wanneer de procedure wordt gestart of wanneer de activatie mislukt. Voor een SQL Server-gebruiker kan de server altijd de rechten controleren.
SELF specificeert dat de opgeslagen procedure wordt uitgevoerd als de huidige gebruiker. (De databaseprincipal voert deze CREATE QUEUE instructie uit.)
'user_name' is de naam van de gebruiker als wie de opgeslagen procedure wordt uitgevoerd. De user_name parameter moet een geldige SQL Server gebruiker zijn die als SQL Server-identificatie is gespecificeerd. De huidige gebruiker moet IMPERSONATE-toestemming hebben voor de user_name die wordt gespecificeerd.
OWNER specificeert dat de opgeslagen procedure wordt uitgevoerd als eigenaar van de wachtrij.
POISON_MESSAGE_HANDLING
Geeft aan of gifberichtbehandeling is ingeschakeld voor de wachtrij. De standaardwaarde is AAN.
Een wachtrij met gifberichten op UIT wordt niet uitgeschakeld na vijf opeenvolgende transactie-terugrollen. Dit maakt het mogelijk om een aangepast gifbericht-handingsysteem door de applicatie te definiëren.
ON-bestandsgroep | [DEFAULT]
Specificeert de SQL Server-bestandsgroep waarop deze wachtrij moet worden aangemaakt. Je kunt de filegroup-parameter gebruiken om een bestandsgroep te identificeren, of de DEFAULT identifier gebruiken om de standaard filegroup voor de service broker-database te gebruiken. In de context van deze clausule DEFAULT is geen sleutelwoord en moet het worden afgebakend als een identificatie. Wanneer er geen bestandsgroep is opgegeven, gebruikt de wachtrij de standaard bestandsgroep voor de database.
Remarks
Een wachtrij kan het doelwit zijn van een SELECT-instructie. De inhoud van een wachtrij kan echter alleen worden aangepast met instructies die werken op Service Broker-gesprekken, zoals SEND, RECEIVE, en END CONVERSATION. Een wachtrij kan niet het doel zijn van een INSERT, UPDATE, DELETE, of TRUNCATE-instructie.
Een wachtrij hoeft geen tijdelijk object te zijn. Daarom zijn wachtrijnamen die beginnen met # niet geldig.
Door een wachtrij in een inactieve toestand aan te maken, kun je de infrastructuur voor een dienst opzetten voordat berichten in de wachtrij worden ontvangen.
Service Broker stopt de activatieprocedures niet wanneer er geen berichten in de wachtrij staan. Een activatie-opgeslagen procedure moet worden afgesloten wanneer er korte tijd geen berichten beschikbaar zijn in de wachtrij.
Rechten voor de activatie-opgeslagen procedure worden gecontroleerd wanneer Service Broker de opgeslagen procedure start, niet wanneer de wachtrij wordt aangemaakt. De CREATE QUEUE instructie verifieert niet dat de gebruiker die in de EXECUTE AS clausule is gespecificeerd toestemming heeft om de opgeslagen procedure uit te voeren zoals gespecificeerd in de PROCEDURE NAME-clausule.
Wanneer een wachtrij niet beschikbaar is, houdt Service Broker berichten vast voor diensten die de wachtrij in de transmissiewachtrij voor de database gebruiken. De sys.transmission_queue catalogusweergave geeft een overzicht van de transmissiewachtrij.
Een wachtrij is een schema-eigendom object. Wachtrijen verschijnen in de sys.objects catalogusweergave.
De volgende tabel geeft een overzicht van de kolommen in een wachtrij.
| Kolomnaam | Gegevenstype | Description |
|---|---|---|
status |
tinyint | Status van het bericht. De RECEIVE instructie geeft alle berichten terug met status 1. Als het geheugenbehoud aan staat, wordt de status dan op 0 gezet. Als de berichtretentie uit staat, wordt het bericht uit de wachtrij verwijderd. Berichten in de wachtrij kunnen een van de volgende waarden bevatten:0=Ontvangen bericht behouden1=Klaar om te ontvangen2=Nog niet compleet3=Verzonden bericht behouden |
priority |
tinyint | Het prioriteitsniveau dat aan dit bericht is toegewezen. |
queuing_order |
bigint | Bericht ordernummer in de wachtrij. |
conversation_group_id |
uniqueidentifier | Identifier voor de gespreksgroep waartoe dit bericht behoort. |
conversation_handle |
uniqueidentifier | Handle voor het gesprek waarvan dit bericht deel uitmaakt. |
message_sequence_number |
bigint | Volgnummer van het bericht in het gesprek. |
service_name |
nvarchar(128) | De naam van de dienst waaraan het gesprek gaat. |
service_id |
int | SQL Server objectidentificatie van de dienst waar het gesprek naartoe gaat. |
service_contract_name |
nvarchar(128) | De naam van het contract waarop het gesprek volgt. |
service_contract_id |
int | SQL Server objectidentificatie van het contract waarop het gesprek volgt. |
message_type_name |
nvarchar(128) | Naam van het berichttype dat het bericht beschrijft. |
message_type_id |
int | SQL Server objectidentificatie van het berichttype dat het bericht beschrijft. |
validation |
nchar(2) | Validatie gebruikt voor het bericht.E=LeegN=GeenX=XML |
message_body |
varbinary(max) | Inhoud van het bericht. |
message_enqueue_time |
datetime | Tijd wanneer het bericht in de wachtrij stond. |
Permissions
Toestemming voor het aanmaken van een wachtrij gebruikt leden van de db_ddladmindb_owner of vaste databaserollen, of de sysadmin vaste serverrol.
REFERENCES De toestemming voor een wachtrij is standaard voor de eigenaar van de wachtrij, leden van de db_ddladmin of db_owner vaste databaserollen, of leden van de sysadmin vaste serverrol.
RECEIVE De toestemming voor een wachtrij is standaard voor de eigenaar van de wachtrij, leden van de db_owner vaste databaserol, of leden van de sysadmin vaste serverrol.
Examples
A. Maak een wachtrij aan zonder parameters
Het volgende voorbeeld creëert een wachtrij die beschikbaar is om berichten te ontvangen. Er is geen activatie-opgeslagen procedure gespecificeerd voor de wachtrij.
CREATE QUEUE ExpenseQueue;
B. Maak een niet-beschikbare wachtrij aan
Het volgende voorbeeld creëert een wachtrij die niet beschikbaar is om berichten te ontvangen. Er is geen activatie-opgeslagen procedure gespecificeerd voor de wachtrij.
CREATE QUEUE ExpenseQueue WITH STATUS=OFF;
C. Maak een wachtrij aan en specificeer interne activatie-informatie
Het volgende voorbeeld creëert een wachtrij die beschikbaar is om berichten te ontvangen. De wachtrij start de opgeslagen procedure expense_procedure wanneer een bericht de wachtrij binnenkomt. De opgeslagen procedure wordt uitgevoerd als de gebruiker ExpenseUser. De wachtrij start een maximum aantal 5 instanties van de opgeslagen procedure.
CREATE QUEUE ExpenseQueue
WITH STATUS=ON,
ACTIVATION (
PROCEDURE_NAME = expense_procedure
, MAX_QUEUE_READERS = 5
, EXECUTE AS 'ExpenseUser' );
D. Maak een wachtrij aan op een specifieke bestandsgroep
Het volgende voorbeeld creëert een wachtrij op de bestandsgroep ExpenseWorkFileGroup.
CREATE QUEUE ExpenseQueue
ON ExpenseWorkFileGroup;
E. Maak een wachtrij aan met meerdere parameters
Het volgende voorbeeld maakt een wachtrij aan op de DEFAULT bestandsgroep. De wachtrij is niet beschikbaar. Berichten blijven in de wachtrij totdat het gesprek waartoe ze behoren eindigt. Wanneer de wachtrij beschikbaar wordt gesteld via ALTER QUEUE, start de wachtrij de opgeslagen procedure AdventureWorks2022.dbo.expense_procedure om berichten te verwerken. De opgeslagen procedure wordt uitgevoerd als de gebruiker die de CREATE QUEUE instructie heeft uitgevoerd. De wachtrij start een maximum aantal 10 instanties van de opgeslagen procedure.
CREATE QUEUE ExpenseQueue
WITH STATUS = OFF
, RETENTION = ON
, ACTIVATION (
PROCEDURE_NAME = AdventureWorks2022.dbo.expense_procedure
, MAX_QUEUE_READERS = 10
, EXECUTE AS SELF )
ON [DEFAULT];
Verwante inhoud
- ALTER QUEUE (Transact-SQL)
- CREATE SERVICE (Transact-SQL)
- DROP QUEUE (Transact-SQL)
- RECEIVE (Transact-SQL)
- EVENTDATA (Transact-SQL)