Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:programu SQL Server
Azure SQL Managed Instance
Usługa SQL Server Service Broker zapewnia natywną obsługę komunikatów i kolejkowania w mechanizmie bazy danych programu SQL Server oraz Azure SQL Managed Instance. Deweloperzy mogą łatwo tworzyć zaawansowane aplikacje, które używają składników aparatu bazy danych do komunikowania się między różnymi bazami danych i tworzyć rozproszone i niezawodne aplikacje.
Kiedy należy używać usługi Service Broker
Użyj składników usługi Service Broker, aby zaimplementować natywne funkcje asynchronicznego przetwarzania komunikatów w bazie danych. Deweloperzy aplikacji korzystający z usługi Service Broker mogą dystrybuować obciążenia danych w kilku bazach danych bez programowania złożonych wewnętrznych komunikacji i obsługi komunikatów. Usługa Service Broker zmniejsza prace programistyczne i testowe, ponieważ usługa Service Broker obsługuje ścieżki komunikacyjne w kontekście konwersacji. Zwiększa również wydajność. Na przykład bazy danych front-end obsługujące strony internetowe mogą rejestrować informacje i wysyłać zadania wymagające dużego przetwarzania do kolejki w bazach danych back-end. Usługa Service Broker zapewnia, że wszystkie zadania są zarządzane w kontekście transakcji w celu zapewnienia niezawodności i spójności technicznej.
Przegląd
Service Broker to platforma dostarczania komunikatów, która umożliwia tworzenie natywnych aplikacji zorientowanych na usługi w bazie danych. W przeciwieństwie do klasycznych funkcji przetwarzania zapytań, które stale odczytują dane z tabel i przetwarzają je podczas cyklu życia zapytania, aplikacje zorientowane na usługi mają usługi bazy danych, które wymieniają komunikaty. Każda usługa ma kolejkę, w której komunikaty są umieszczane do momentu, kiedy one zostaną przetworzone.
Komunikaty w kolejkach można pobrać przy użyciu polecenia Transact-SQL RECEIVE lub przez procedurę aktywacji wywoływaną za każdym razem, gdy komunikat pojawi się w kolejce.
Tworzenie usług
Uwaga / Notatka
Usługa docelowa musi uwidocznić co najmniej jeden kontrakt. Jeśli tworzysz usługę bez kontraktów, nie będzie można odbierać komunikatów. Wysłane komunikaty będą wydawać się wysłane pomyślnie, ale pozostaną w kolejce sys.transmission_queue inicjatora.
/*
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]);
Wysyłanie komunikatów
Wiadomości są wysyłane podczas konwersacji między usługami przy użyciu instrukcji SEND Transact-SQL. Konwersacja to kanał komunikacyjny ustanowiony między usługami przy użyciu instrukcji BEGIN DIALOG Transact-SQL.
-- 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"/>');
Wiadomość jest wysyłana do pliku ExpensesService i umieszczona w pliku dbo.ExpenseQueue. Ponieważ nie ma procedury aktywacji skojarzonej z tą kolejką, komunikat pozostaje w kolejce, dopóki ktoś go nie odczytuje.
Przetwarzanie komunikatów
Komunikaty umieszczone w kolejce można wybrać przy użyciu standardowego zapytania SELECT. Instrukcja SELECT nie modyfikuje kolejki i nie usuwa komunikatów. Aby odczytać i ściągnąć komunikaty z kolejki, możesz użyć instrukcji RECEIVE Transact-SQL.
RECEIVE TOP (1)
conversation_handle,
message_type_name,
TRY_CAST (message_body AS NVARCHAR (MAX)) AS message_body_text
FROM dbo.ExpenseQueue;
GO
Po przetworzeniu wszystkich komunikatów z kolejki należy zamknąć konwersację za pomocą instrukcji 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
Dokumentacja usługi Service Broker
Aby uzyskać więcej informacji na temat usługi Service Broker, zobacz:
-
Instrukcje języka definicji danych dla instrukcji
CREATE,ALTERiDROP - instrukcjeTransact-SQL
- Widoki katalogu Service Broker (Transact-SQL)
- dynamiczne widoki zarządzania związane z brokerem usług (Transact-SQL)
- narzędzie ssbdiagnose (Service Broker)
Możesz również zapoznać się z wcześniej opublikowaną dokumentacją dotyczącą pojęć związanych z usługą Service Broker oraz zadań związanych z programowaniem i zarządzaniem.
Co nowego w usłudze Service Broker
Service Broker i Azure SQL Managed Instance
Wymiana komunikatów między wystąpieniami usługi Service Broker między wystąpieniami usługi Azure SQL Managed Instance i wymianą komunikatów między programem SQL Server i wystąpieniem usługi Azure SQL Manage Jest obecnie dostępna w publicznej wersji zapoznawczej:
-
CREATE ROUTE: Określony port musi mieć wartość 4022. Zobacz CREATE ROUTE (Transact-SQL). -
ALTER ROUTE: Określony port musi mieć wartość 4022. Zobacz ALTER ROUTE (Transact-SQL).
Obsługiwane są zabezpieczenia transportowe, natomiast zabezpieczenia dialogowe nie są wspierane.
-
CREATE REMOTE SERVICE BINDINGnie jest obsługiwany.
Usługa Service Broker jest domyślnie włączona i nie można jej wyłączyć. Następujące ALTER DATABASE opcje nie są obsługiwane:
ENABLE_BROKERDISABLE_BROKER
Nie wprowadzono żadnych znaczących zmian w programie SQL Server 2019 (15.x). W programie SQL Server 2012 wprowadzono następujące zmiany (11.x).
Komunikaty mogą być wysyłane do wielu usług docelowych (multiemisji)
Składnia instrukcji SEND została rozszerzona w celu włączenia multiemisji przez obsługę wielu dojść do konwersacji.
Kolejki uwidaczniają czas kolejkowania komunikatu
Kolejki mają nową kolumnę , message_enqueue_timektóra pokazuje, jak długo komunikat był w kolejce.
Można wyłączyć obsługę komunikatów zatrutych
Instrukcje CREATE QUEUE i ALTER QUEUE mają teraz możliwość włączania lub wyłączania obsługi komunikatów trucizny przez dodanie klauzuli POISON_MESSAGE_HANDLING (STATUS = ON | OFF). Widok sys.service_queues wykazu zawiera teraz kolumnę is_poison_message_handling_enabled wskazującą, czy komunikat trucizny jest włączony, czy wyłączony.
Obsługa grup dostępności w usłudze Service Broker
Aby uzyskać więcej informacji, zobacz Broker Usług z grupami dostępności Always On (SQL Server).