Udostępnij przez


Lekcja 2: Tworzenie procedury aktywacja wewnętrzny

W tej lekcji użytkownik zapozna utworzyć procedura przechowywana do procesu wiadomości z Service Broker kolejka. Omówiono również sposób do określenia, że procedura można aktywować wszelkie czas są wiadomości w kolejce.

Procedury

Przełącz się do bazy danych AdventureWorks

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go, należy przełączyć kontekst do AdventureWorks bazy danych.

    USE AdventureWorks;
    GO
    

Utwórz procedurę aktywacja wewnętrznego przechowywania

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Następnie uruchom go do utworzenia procedura przechowywana.Gdy jest uruchomione, zachowuje procedura przechowywana, odbieranie wiadomości, dopóki istnieją wiadomości w kolejce.Jeśli limit czasu odbioru bez zwracania wiadomości, kończy się procedura przechowywana.Jeśli otrzymano komunikat komunikat z żądaniem, procedura przechowywana zwraca komunikat odpowiedzi.Jeśli otrzymano komunikat jest EndDialog wiadomości, procedura przechowywana kończy się po stronie miejsce docelowe konwersacji.Jeśli jest odebranej wiadomości i Błąd wiadomości, jej rolkach ponownie transakcji.

    CREATE PROCEDURE TargetActivProc
    AS
      DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
      DECLARE @RecvReqMsg NVARCHAR(100);
      DECLARE @RecvReqMsgName sysname;
    
      WHILE (1=1)
      BEGIN
    
        BEGIN TRANSACTION;
    
        WAITFOR
        ( RECEIVE TOP(1)
            @RecvReqDlgHandle = conversation_handle,
            @RecvReqMsg = message_body,
            @RecvReqMsgName = message_type_name
          FROM TargetQueueIntAct
        ), TIMEOUT 5000;
    
        IF (@@ROWCOUNT = 0)
        BEGIN
          ROLLBACK TRANSACTION;
          BREAK;
        END
    
        IF @RecvReqMsgName =
           N'//AWDB/InternalAct/RequestMessage'
        BEGIN
           DECLARE @ReplyMsg NVARCHAR(100);
           SELECT @ReplyMsg =
           N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
    
           SEND ON CONVERSATION @RecvReqDlgHandle
                  MESSAGE TYPE 
                  [//AWDB/InternalAct/ReplyMessage]
                  (@ReplyMsg);
        END
        ELSE IF @RecvReqMsgName =
            N'https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog'
        BEGIN
           END CONVERSATION @RecvReqDlgHandle;
        END
        ELSE IF @RecvReqMsgName =
            N'https://schemas.microsoft.com/SQL/ServiceBroker/Error'
        BEGIN
           END CONVERSATION @RecvReqDlgHandle;
        END
    
        COMMIT TRANSACTION;
    
      END
    GO
    

Zmieniać kolejki miejsce docelowe, do określenia wewnętrznego aktywacja

  • Skopiuj i wklej następujący kod w oknie Edytor kwerend.Then, run it to specify that Service Broker activate the TargetActiveProc stored procedure to process messages from TargetQueueIntAct.Service Broker will run a copy of TargetActiveProc any time a message is received in TargetQueueIntAct and no copy of the procedure is already running.Service Broker will run additional copies of TargetActiveProc whenever the existing copies do not keep up with the number of incoming messages.

    ALTER QUEUE TargetQueueIntAct
        WITH ACTIVATION
        ( STATUS = ON,
          PROCEDURE_NAME = TargetActivProc,
          MAX_QUEUE_READERS = 10,
          EXECUTE AS SELF
        );
    GO
    

Następne kroki

Została pomyślnie skonfigurowana AdventureWorks do obsługi komunikacji między //AWDB/InternalAct/InitiatorService and the //AWDB/InternalAct/TargetService.Następnie zostanie zakończony konwersacji przy użyciu konfiguracja.Zobacz Lekcja 3: Począwszy od konwersacji i przenoszenia wiadomości.