Tjänstmäklare
gäller för:SQL Server
Azure SQL Managed Instance
SQL Server Service Broker ger inbyggt stöd för meddelanden och köer i SQL Server Database Engine och Azure SQL Managed Instance. Utvecklare kan enkelt skapa avancerade program som använder databasmotorkomponenterna för att kommunicera mellan olika databaser och skapa distribuerade och tillförlitliga program.
När du ska använda Service Broker
Använd Service Broker-komponenter för att implementera inbyggda funktioner för asynkron meddelandebearbetning i databasen. Programutvecklare som använder Service Broker kan distribuera dataarbetsbelastningar över flera databaser utan att programmera komplex kommunikation och meddelanden internt. Service Broker minskar utvecklingen och testarbetet eftersom Service Broker hanterar kommunikationsvägarna i kontexten för en konversation. Det förbättrar också prestandan. Till exempel kan klientdatabaser som stöder webbplatser registrera information och skicka processintensiva uppgifter till kö i serverdatabaser. Service Broker säkerställer att alla uppgifter hanteras i samband med transaktioner för att säkerställa tillförlitlighet och teknisk konsekvens.
Överblick
Service Broker är ett ramverk för meddelandeleverans som gör att du kan skapa inbyggda tjänstorienterade program i databasen. Till skillnad från klassiska funktioner för frågebearbetning som ständigt läser data från tabellerna och bearbetar dem under frågelivscykeln har du i tjänstorienterade program databastjänster som utbyter meddelandena. Varje tjänst har en kö där meddelandena placeras tills de bearbetas.
Meddelandena i köerna kan hämtas med hjälp av kommandot Transact-SQL RECEIVE
eller genom aktiveringsproceduren som anropas när meddelandet kommer in i kön.
Skapa tjänster
Databastjänster skapas med hjälp av instruktionen CREATE SERVICE Transact SQL. Tjänsten kan associeras med meddelandeköns skapande med hjälp av instruktionen CREATE QUEUE:
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue;
Skicka meddelanden
Meddelanden skickas i konversationen mellan tjänsterna med hjälp av instruktionen SEND Transact-SQL. En konversation är en kommunikationskanal som upprättas mellan tjänsterna med hjälp av instruktionen BEGIN DIALOG
Transact-SQL.
DECLARE @dialog_handle UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE 'ExpensesService';
SEND ON CONVERSATION @dialog_handle (@Message) ;
Meddelandet skickas till ExpensesService
och placeras i dbo.ExpenseQueue
. Eftersom det inte finns någon aktiveringsprocedur associerad med den här kön förblir meddelandet kvar i kön tills någon läser det.
Bearbeta meddelanden
De meddelanden som placeras i kön kan väljas med hjälp av en standardfråga SELECT
. Instruktionen SELECT
ändrar inte kön och tar bort meddelandena. Om du vill läsa och hämta meddelandena från kön kan du använda instruktionen RECEIVE Transact-SQL.
RECEIVE conversation_handle, message_type_name, message_body
FROM ExpenseQueue;
När du har bearbetat alla meddelanden från kön bör du stänga konversationen med hjälp av instruktionen END CONVERSATION Transact-SQL.
Var finns dokumentationen för Service Broker?
Referensdokumentationen för Service Broker ingår i SQL Server-dokumentationen. Den här referensdokumentationen innehåller följande avsnitt:
DDL-instruktioner (Data Definition Language) (Transact-SQL) för CREATE-, ALTER- och DROP-instruktioner
katalogvyer för Service Broker (Transact-SQL)
Service Broker-relaterade dynamiska hanteringsvyer (Transact-SQL)
Se den tidigare publicerade dokumentationen för Service Broker-begrepp och för utvecklings- och hanteringsuppgifter. Den här dokumentationen återges inte i SQL Server-dokumentationen på grund av det lilla antalet ändringar i Service Broker i de senaste versionerna av SQL Server.
Nyheter i Service Broker
Service Broker och Azure SQL Managed Instance
Meddelandeutbyte mellan instanstjänster mellan instanser av Azure SQL Managed Instance och meddelandeutbyte mellan SQL Server och Azure SQL Managed Instance är för närvarande i offentlig förhandsversion.
-
CREATE ROUTE
: Den angivna porten måste vara 4022. Se SKAPA RUTT. -
ALTER ROUTE
: Den angivna porten måste vara 4022. Se ALTER ROUTE.
Transportsäkerhet stöds, dialogsäkerhet är inte:
-
CREATE REMOTE SERVICE BINDING
stöds inte.
Service broker är aktiverat som standard och kan inte inaktiveras. Följande ALTER DATABASE-alternativ stöds inte:
ENABLE_BROKER
DISABLE_BROKER
Inga betydande ändringar infördes i SQL Server 2019 (15.x). Följande ändringar introducerades i SQL Server 2012 (11.x).
Meddelanden kan skickas till flera måltjänster (multicast)
Syntaxen för instruktionen SEND (Transact-SQL) har utökats för att aktivera multicast genom stöd för flera konversationshandtag.
Köer exponerar den köade tiden för meddelandet
Köer har en ny kolumn, message_enqueue_time, som visar hur länge ett meddelande har legat i kön.
Hantering av giftmeddelanden kan inaktiveras
CREATE QUEUE (Transact-SQL) och ALTER QUEUE (Transact-SQL)-instruktioner har nu möjlighet att aktivera eller inaktivera hantering av giftmeddelanden genom att lägga till -satsen POISON_MESSAGE_HANDLING (STATUS = ON | OFF)
. Katalogvyn sys.service_queues nu har kolumnen is_poison_message_handling_enabled för att ange om giftmeddelande är aktiverat eller inaktiverat.
AlwaysOn-support i Service Broker
Mer information finns i Service Broker med AlwaysOn-tillgänglighetsgrupper (SQL Server).
Nästa steg
Den vanligaste användningen av Service Broker är för händelsemeddelanden. Lär dig hur du implementera händelsemeddelanden, konfigurera dialogsäkerheteller få mer information.