Notatka
Dostęp do tej strony wymaga autoryzacji. Może 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 SEND instrukcji 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.
Przetwórz wiadomości
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ć RECEIVE instrukcji 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 zakończyć konwersację za pomocą instrukcji Transact-SQL END CONVERSATION.
-- 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 usługi Service Broker między wystąpieniami usługi Azure SQL Managed Instance oraz wymiana komunikatów między programem SQL Server a usługą Azure SQL Managed Instance 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, aby umożliwić multicast przez obsługę wielu uchwytów konwersacji.
Kolejki uwidaczniają czas kolejkowania komunikatu
Kolejki mają nową kolumnę message_enqueue_time, która pokazuje czas przebywania wiadomości 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).