Sdílet prostřednictvím


Broker služeb (Service Broker)

platí pro:SQL Serverazure 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í.

zprostředkovatel služby

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:

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:

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.