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.