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
SQL Server Service Broker biedt systeemeigen ondersteuning voor berichten en wachtrijen in de SQL Server Database Engine en Azure SQL Managed Instance. Ontwikkelaars kunnen eenvoudig geavanceerde toepassingen maken die gebruikmaken van de database-engineonderdelen om te communiceren tussen verschillende databases en gedistribueerde en betrouwbare toepassingen bouwen.
Wanneer servicebroker gebruiken
Gebruik Service Broker-onderdelen om systeemeigen asynchrone berichtverwerkingsfuncties in de database te implementeren. Toepassingsontwikkelaars die Service Broker gebruiken, kunnen gegevensworkloads over verschillende databases distribueren zonder complexe communicatie en interne berichten te programmeren. Service Broker vermindert het ontwikkelen en testen van werk omdat Service Broker de communicatiepaden verwerkt in de context van een gesprek. Het verbetert ook de prestaties. Front-end databases die websites ondersteunen, kunnen bijvoorbeeld informatie vastleggen en intensieve processen in de wachtrij zetten in back-end databases. Service Broker zorgt ervoor dat alle taken worden beheerd in de context van transacties om betrouwbaarheid en technische consistentie te garanderen.
Overzicht
Service Broker is een framework voor berichtbezorging waarmee u systeemeigen in-databaseservicegerichte toepassingen kunt maken. In tegenstelling tot klassieke queryverwerkingsfuncties die voortdurend gegevens uit de tabellen lezen en verwerken tijdens de levenscyclus van de query, hebben servicegerichte toepassingen databaseservices die de berichten uitwisselen. Elke service heeft een wachtrij waarin de berichten worden geplaatst totdat ze worden verwerkt.
De berichten in de wachtrijen kunnen worden opgehaald met behulp van de opdracht Transact-SQL RECEIVE of door de activeringsprocedure die wordt aangeroepen wanneer het bericht in de wachtrij binnenkomt.
Services maken
Opmerking
Een doelservice moet een of meer contracten beschikbaar maken. Als u een service maakt zonder contracten, kan deze geen berichten ontvangen. Verzonden berichten lijken te slagen, maar de berichten blijven op de sys.transmission_queue van de initiator
/*
In this example, the initiator must then use ON CONTRACT [DEFAULT] and a MESSAGE TYPE [DEFAULT]. [DEFAULT] is a delimited identifier for the built‑in contract and isn't a T‑SQL keyword, so it must be bracketed or quoted.
*/
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue ([DEFAULT]);
Berichten verzenden
Berichten worden verzonden in het gesprek tussen de services met behulp van de instructie SEND Transact-SQL. Een gesprek is een communicatiekanaal dat tot stand is gebracht tussen de services met behulp van de BEGIN DIALOG Transact-SQL-verklaring.
-- Begin a dialog
DECLARE @dialog_handle AS UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE N'ExpensesService'
ON CONTRACT [DEFAULT];
-- Send a message
SEND ON CONVERSATION (@dialog_handle)
MESSAGE TYPE [DEFAULT] (N'<Expense ExpenseId="1" Amount="123.45" Currency="USD"/>');
Het bericht wordt verzonden naar de ExpensesService en geplaatst in dbo.ExpenseQueue. Omdat er geen activeringsprocedure is gekoppeld aan deze wachtrij, blijft het bericht in de wachtrij totdat iemand het leest.
Berichten verwerken
De berichten die in de wachtrij worden geplaatst, kunnen worden geselecteerd met behulp van een standaardquery SELECT. De SELECT instructie wijzigt de wachtrij niet en verwijdert de berichten. Als u de berichten uit de wachtrij wilt lezen en ophalen, kunt u de instructie RECEIVE Transact-SQL gebruiken.
RECEIVE TOP (1)
conversation_handle,
message_type_name,
TRY_CAST (message_body AS NVARCHAR (MAX)) AS message_body_text
FROM dbo.ExpenseQueue;
GO
Zodra u alle berichten uit de wachtrij hebt verwerkt, moet u het gesprek sluiten met behulp van de instructie END CONVERSATION Transact-SQL.
-- Drain any remaining target conversations for the from the queue
DECLARE @conversation_hdl AS UNIQUEIDENTIFIER;
WHILE EXISTS (SELECT 1 FROM dbo.ExpenseQueue)
BEGIN
RECEIVE TOP (1) @conversation_hdl = conversation_handle FROM dbo.ExpenseQueue;
END CONVERSATION @conversation_hdl;
END
GO
Documentatie voor Service Broker
Zie voor meer informatie over Service Broker:
-
Gegevensdefinitietaalinstructies voor
CREATE,ALTERenDROPinstructies - Transact-SQL instructies
- servicebroker-catalogusweergaven (Transact-SQL)
- Service Broker-gerelateerde dynamische beheerweergaven (Transact-SQL)
- hulpprogramma ssbdiagnose (Service Broker)
U kunt ook verwijzen naar de eerder gepubliceerde documentatie voor Service Broker-concepten en voor ontwikkelings- en beheertaken.
Wat is er nieuw in Service Broker?
Service Broker en Azure SQL Managed Instance
Service Broker-berichtenuitwisseling tussen exemplaren van Azure SQL Managed Instance en berichtuitwisseling tussen SQL Server en Azure SQL Manage Instance is momenteel beschikbaar als openbare preview:
-
CREATE ROUTE: de opgegeven poort moet 4022 zijn. Zie CREATE ROUTE (Transact-SQL). -
ALTER ROUTE: de opgegeven poort moet 4022 zijn. Zie ALTER ROUTE (Transact-SQL).
Transportbeveiliging wordt ondersteund, terwijl dialoogbeveiliging niet wordt ondersteund.
-
CREATE REMOTE SERVICE BINDINGwordt niet ondersteund.
Service Broker is standaard ingeschakeld en kan niet worden uitgeschakeld. De volgende ALTER DATABASE opties worden niet ondersteund:
ENABLE_BROKERDISABLE_BROKER
Er zijn geen belangrijke wijzigingen geïntroduceerd in SQL Server 2019 (15.x). De volgende wijzigingen zijn geïntroduceerd in SQL Server 2012 (11.x).
Berichten kunnen worden verzonden naar meerdere doelservices (multicast)
De syntaxis van de SEND-instructie is uitgebreid om multicast mogelijk te maken door meerdere gespreksgrepen te ondersteunen.
Wachtrijen onthullen de wachttijd van het bericht
Wachtrijen hebben een nieuwe kolom, message_enqueue_timedie laat zien hoe lang een bericht in de wachtrij staat.
Verwerking van gifberichten kan worden uitgeschakeld
De instructies CREATE QUEUE en ALTER QUEUE hebben nu de mogelijkheid om de verwerking van gifberichten in of uit te schakelen door de component toe te voegen. POISON_MESSAGE_HANDLING (STATUS = ON | OFF) De catalogusweergave sys.service_queues bevat nu de kolom is_poison_message_handling_enabled om aan te geven of gifbericht is ingeschakeld of uitgeschakeld.
Ondersteuning voor beschikbaarheidsgroepen in Service Broker
Zie Service Broker met AlwaysOn-beschikbaarheidsgroepen (SQL Server)voor meer informatie.