WEB开发网
开发学院数据库MSSQL Server SQLServer实战经验分享--ServiceBroker安全配置... 阅读

SQLServer实战经验分享--ServiceBroker安全配置和使用示例

 2009-02-12 10:23:49 来源:WEB开发网   
核心提示: 目标方定义队列处理存储过程CREATEPROCEDUREdbo.usp_msgOperation_CMDASRETURN0GO定义队列CREATEQUEUEmsgOperationProcessQueueWITHSTATUS=ON,RETENTION=OFF,ACTIVATION(STAT

目标方

定义队列处理存储过程

CREATEPROCEDUREdbo.usp_msgOperation_CMDAS
  RETURN0
GO

定义队列

CREATEQUEUEmsgOperationProcessQueue
WITH
STATUS=ON,
RETENTION=OFF,
ACTIVATION
(
  STATUS=ON,
  PROCEDURE_NAME=dbo.usp_msgOperation_CMD,
  MAX_QUEUE_READERS=1,
  EXECUTEASSELF
);

实现队列处理存储过程

ALTERPROCEDUREdbo.usp_msgOperation_CMD
AS
declare@message_bodyasxml;
declare@message_typeassysname;
declare@dialogasuniqueidentifier;
WHILE(1=1)
  BEGIN
    BEGINTRANSACTION
    --接收下一条可用的消息
    WAITFOR(
      RECEIVETOP(1)--一次只处理一条消息
      @message_type=message_type_name,
      @message_body=message_body,
      @dialog=[conversation_handle]
      FROMdbo.msgOperationProcessQueue
    ),TIMEOUT2000
    --如果没收到任何消息则跳出循环
    IF(@@ROWCOUNT=0)
    BEGIN
      ROLLBACKTRANSACTION
      BREAK;
    END  
    --根据接收的消息类型执行不同的消息处理逻辑
    IF(@message_type='http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
    BEGIN
      ENDCONVERSATION@dialog;
    END
    ELSEIF(@message_type='http://schemas.microsoft.com/SQL/ServiceBroker/Error')
    BEGIN
      ENDCONVERSATION@dialog;
    END
    ELSEIF(@message_type='http://Samples/SQL/ServiceBroker/msgOperation')
    BEGIN
      declare@msgIdint
      declare@msgContentnvarchar(2000)
      BEGINTRY
        SET@msgId=@message_body.value('data(//msgId)[1]','int');
        SET@msgContent=@message_body.value('data(//msgContent)[1]','nvarchar(2000)');
        --此处可以处理自定义业务逻辑
        
        ENDCONVERSATION@dialog;
      ENDTRY
      BEGINCATCH
        ROLLBACKTRANSACTION
        CONTINUE
      ENDCATCH
      
    END
    COMMITTRANSACTION
  END
GO

上一页  1 2 3 4 5 6 7  下一页

Tags:SQLServer 实战 经验

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接