Udostępnij za pośrednictwem


Lekcja 2: Tworzenie procedury wewnętrzne aktywacji

W tej lekcji użytkownik zapozna utworzyć procedura składowana w procesie wiadomości z Service Broker kolejki.Omówiono też sposób określania aktywować procedury wszelkich czas są wiadomości w kolejce.

Procedury

Przełącz się do bazy danych AdventureWorks2008R2

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go przełączyć kontekst do AdventureWorks2008R2 bazy danych.

    USE AdventureWorks2008R2;
    GO
    

Tworzenie wewnętrznych aktywacjaprocedura składowana

  • Skopiuj i wklej następujący kod w oknie Edytora kwerend.Następnie uruchom go utworzyć procedura składowana.Kiedy jest uruchamiane i utrzymuje procedura składowana, odbieranie wiadomości, tak długo, jak istnieją wiadomości w kolejce.Jeśli limit czasu odbioru bez zwracania wiadomości, kończy się procedura składowana.Jeśli odebrana wiadomość była komunikatu żądania, procedura składowana zwraca komunikat odpowiedzi.Jeśli otrzymano komunikat jest EndDialog wiadomości, procedura składowana kończy się po stronie miejsce docelowe konwersacji.Jeśli odebrana wiadomość i Błąd wiadomości, wycofywaniu 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
    

Zmień kolejka docelowa do określenia wewnętrznego aktywacja

  • Skopiuj i wklej następujący kod w oknie Edytora 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

Pomyślnie skonfigurowano AdventureWorks2008R2 do obsługi konwersację między //AWDB/InternalAct/InitiatorService i //AWDB/InternalAct/TargetService.Następnie zostanie ukończona konwersacji przy użyciu konfiguracja. See Lekcja 3: Począwszy od konwersacji i przekazywania wiadomości.