Home Forums Programming Service Broker Sequentially processing messages in Service Broker Queue RE: Sequentially processing messages in Service Broker Queue

  • Here is the script of my Activation Proc:

    CREATE PROCEDURE [dbo].[usp_ExecutePackage]

    WITH EXECUTE AS 'dbo'

    AS

    BEGIN

    SET ARITHABORT ON

    set nocount on

    set xact_abort on

    DECLARE @PackageName VARCHAR(500)

    DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;

    DECLARE @RecvReqMsg NVARCHAR(100);

    DECLARE @RecvReqMsgName sysname;

    BEGIN TRY

    BEGIN TRANSACTION;

    WAITFOR

    ( RECEIVE TOP(1)

    @RecvReqDlgHandle = conversation_handle,

    @RecvReqMsg = message_body,

    @RecvReqMsgName = message_type_name

    FROM InstTargetQueue

    ), TIMEOUT 1000;

    SELECT @RecvReqMsg AS ReceivedRequestMsg;

    IF @RecvReqMsgName = N'//BothDB/2InstSample/RequestMessage'

    BEGIN

    DECLARE @ReplyMsg NVARCHAR(100);

    SELECT @ReplyMsg =

    N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';

    SEND ON CONVERSATION @RecvReqDlgHandle

    MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]

    (@ReplyMsg);

    END CONVERSATION @RecvReqDlgHandle;

    END

    --SELECT @ReplyMsg AS SentReplyMsg;

    IF @RecvReqMsg='<RequestMsg>TestPackage</RequestMsg>'

    EXEC dbo.usp_ExecutePackage_TestPackage

    ELSE IF @RecvReqMsg='<RequestMsg>TestPackage1</RequestMsg>'

    EXEC usp_ExecutePackage_TestPackage1

    -- Display recieved request.

    --SELECT @RecvReplyMsg AS ReceivedReplyMsg;

    COMMIT TRANSACTION;

    END TRY

    BEGIN CATCH

    IF @@TRANCOUNT > 0

    ROLLBACK TRANSACTION;

    INSERT INTO [InstTargetDB].[dbo].[Error_log]

    ([ERROR_NUMBER]

    ,[ErrorSeverity]

    ,[ErrorState]

    ,[ErrorProcedure]

    ,[ErrorLine]

    ,[ErrorMessage])

    SELECT

    ERROR_NUMBER() AS ErrorNumber,

    CAST(ERROR_SEVERITY() AS VARCHAR(100)) AS ErrorSeverity,

    CAST(ERROR_STATE()AS VARCHAR(100)) as ErrorState,

    CAST(ERROR_PROCEDURE()AS VARCHAR(100)) as ErrorProcedure,

    CAST(ERROR_LINE()AS VARCHAR(100)) as ErrorLine,

    CAST(ERROR_MESSAGE()AS VARCHAR(2000)) as ErrorMessage;

    END CATCH

    END