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.
Zobacz także