Broker služeb (Service Broker)
platí pro:SQL Server
azure SQL Managed Instance
SQL Server Service Broker poskytuje nativní podporu pro zasílání zpráv a řazení do front v databázovém stroji SQL Serveru a Azure SQL Managed Instance. Vývojáři můžou snadno vytvářet sofistikované aplikace, které používají komponenty databázového stroje ke komunikaci mezi různorodými databázemi a vytvářet distribuované a spolehlivé aplikace.
Kdy použít Service Broker
Pomocí komponent Service Broker můžete implementovat nativní funkce asynchronního zpracování zpráv v databázi. Vývojáři aplikací, kteří používají Service Broker, můžou distribuovat datové úlohy napříč několika databázemi bez programování složité komunikace a interních zpráv. Service Broker snižuje práci na vývoji a testování tím, že zpracovává komunikační cesty v rámci konverzace. Zvyšuje také výkon. Front-endové databáze podporující weby můžou například zaznamenávat informace a odesílat úlohy náročné na zpracování do fronty v back-endových databázích. Service Broker zajišťuje, že všechny úlohy se spravují v kontextu transakcí, aby se zajistila spolehlivost a technická konzistence.
Přehled
Service Broker je architektura pro doručování zpráv, která umožňuje vytvářet nativní aplikace orientované na databázovou službu. Na rozdíl od klasických funkcí zpracování dotazů, které neustále čtou data z tabulek a zpracovávají je během životního cyklu dotazů, máte v aplikaci orientované na službu databázové služby, které vyměňují zprávy. Každá služba má frontu, do které se zprávy umístí, dokud se nezpracují.
Zprávy ve frontách lze načíst buď pomocí příkazu Transact-SQL RECEIVE
, nebo automaticky prostřednictvím aktivační procedury, která se spustí při příchodu zprávy do fronty.
Vytváření služeb
Databázové služby se vytvářejí pomocí příkazu CREATE SERVICE Transact SQL. Službu lze přidružit k vytvoření fronty zpráv pomocí příkazu CREATE QUEUE:
CREATE QUEUE dbo.ExpenseQueue;
GO
CREATE SERVICE ExpensesService
ON QUEUE dbo.ExpenseQueue;
Odesílání zpráv
Zprávy se odesílají v konverzaci mezi službami pomocí příkazu SEND Transact-SQL. Konverzace je komunikační kanál vytvořený mezi službami pomocí příkazu BEGIN DIALOG
Transact-SQL.
DECLARE @dialog_handle UNIQUEIDENTIFIER;
BEGIN DIALOG @dialog_handle
FROM SERVICE ExpensesClient
TO SERVICE 'ExpensesService';
SEND ON CONVERSATION @dialog_handle (@Message) ;
Zpráva bude odeslána do ExpensesService
a umístěna v dbo.ExpenseQueue
. Vzhledem k tomu, že k této frontě není přidružen žádný aktivační postup, zpráva zůstane ve frontě, dokud ji někdo nepřečte.
Zpracování zpráv
Zprávy umístěné ve frontě lze vybrat pomocí standardního dotazu SELECT
. Příkaz SELECT
neupraví frontu ani neodstraní zprávy. Ke čtení a načítání zpráv z fronty můžete použít příkaz RECEIVE Transact-SQL.
RECEIVE conversation_handle, message_type_name, message_body
FROM ExpenseQueue;
Jakmile zpracujete všechny zprávy z fronty, měli byste konverzaci zavřít pomocí příkazu END CONVERSATION Transact-SQL.
Kde je dokumentace ke službě Service Broker?
Referenční dokumentace pro Service Broker je součástí dokumentace k SQL Serveru. Tato referenční dokumentace obsahuje následující části:
Příkazy jazyka DDL (Data Definition Language) (Transact-SQL) pro příkazy CREATE, ALTER a DROP
zobrazení katalogu Service Broker (Transact-SQL)
zobrazení dynamické správy související se službou Service Broker (Transact-SQL)
Podívejte se na dříve publikovanou dokumentaci o konceptech služby Service Broker a úlohách rozvoje a správě. Tato dokumentace není reprodukována v dokumentaci k SQL Serveru kvůli malému počtu změn ve službě Service Broker v posledních verzích SQL Serveru.
Co je nového ve službě Service Broker
Service Broker a Azure SQL Managed Instance
Výměna zpráv zprostředkovatele služeb mezi instancemi Azure SQL Managed Instance a výměnou zpráv mezi SQL Serverem a službou Azure SQL Manage Instance je aktuálně ve verzi Public Preview:
-
CREATE ROUTE
: Zadaný port musí být 4022. Viz VYTVOŘIT TRASU. -
ALTER ROUTE
: Zadaný port musí být 4022. Viz ALTER ROUTE.
Zabezpečení přenosu je podporováno, zabezpečení dialogů není podporováno.
-
CREATE REMOTE SERVICE BINDING
se nepodporuje.
Služba Service Broker je ve výchozím nastavení povolená a nelze ji zakázat. Následující možnosti ALTER DATABASE nejsou podporovány:
ENABLE_BROKER
DISABLE_BROKER
V SQL Serveru 2019 (15.x) nebyly zavedeny žádné významné změny. V SQL Serveru 2012 (11.x) byly zavedeny následující změny.
Zprávy je možné odesílat do více cílových služeb (vícesměrové vysílání).
Syntaxe příkazu SEND (Transact-SQL) byla rozšířena tak, aby umožňovala vícesměrové vysílání podporou více popisovačů konverzací.
Fronty zpřístupňují čas zařazení zprávy do fronty
Fronty mají nový sloupec message_enqueue_time, který ukazuje, jak dlouho byla zpráva ve frontě.
Zpracování jedovatých zpráv je možné zakázat.
Příkazy CREATE QUEUE (Transact-SQL) a ALTER QUEUE (Transact-SQL ) teď mají možnost povolit nebo zakázat zpracování otrávených zpráv přidáním klauzule POISON_MESSAGE_HANDLING (STATUS = ON | OFF)
. Zobrazení katalogu sys.service_queues teď obsahuje sloupec is_poison_message_handling_enabled označující, jestli je povolená nebo zakázaná zpráva o jedu.
Podpora AlwaysOn ve službě Service Broker
Další informace naleznete v tématu Service Broker se skupinami dostupnosti AlwaysOn (SQL Server).
Další kroky
Nejběžnějším použitím služby Service Broker je oznámení událostí. Zjistěte, jak implementovat oznámení událostí, konfigurovatzabezpečení dialogového okna nebo získat další informace.