Delen via


Dienstmakelaar

van toepassing op:SQL ServerAzure 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.

Diagram van Service Broker-processtroom.

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:

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:

Transportbeveiliging wordt ondersteund, terwijl dialoogbeveiliging niet wordt ondersteund.

  • CREATE REMOTE SERVICE BINDING wordt niet ondersteund.

Service Broker is standaard ingeschakeld en kan niet worden uitgeschakeld. De volgende ALTER DATABASE opties worden niet ondersteund:

  • ENABLE_BROKER
  • DISABLE_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.