Udostępnij za pomocą


Broker Usług

Dotyczy:programu SQL ServerAzure 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.

Diagram przepływu procesów usługi Service Broker.

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:

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:

Obsługiwane są zabezpieczenia transportowe, natomiast zabezpieczenia dialogowe nie są wspierane.

  • CREATE REMOTE SERVICE BINDING nie 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_BROKER
  • DISABLE_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).