• sql server 2005中的Service broker小示例(未完善)



    --Service broker示例
    --下面将创建一个向数据库添加员工的简单示例。
    --需求是能够让初级人力资源员工向公司的人力资源系统添加记录。因为它的经理需要在记录得到一个永远的ID之前查看记录,我们决定创建的应用程序把接收的记录在被审查之前都放在一个“贮藏”表中。
    ---在我的测试系统上,我创建了一个只含有Employee表的serviceBrokerExample数据库。那个表只含有一个名为EmployeeInfo的列,它的数据类型为XML,这是我应用程序接受的格式。利用以下代码可以在
    --测试系统上创建这些对像:
    --create db
    --create database servicebrokerexample
    go
    --create table
    use servicebrokerexample
    go
    create table employee
    (
    employeeinfo xml null
    ) on [primary]
    go
    --创建了这些后,就可以创建系统使用的消息类型了。这里我指定类型以确保数据是适当的XML格式,但在生产环境中通常需要引用一个完整的XML架构文件:
    create message type
    [serviceBroker/example/employee/addEmployee]
    validation=well_formed_xml
    --现在可以创建系统使用的约定了,会话的每一方都有。可以看出,其中使用了刚刚创建的AddEmployee消息类型:
    create contract
    [serviceBroker/example/employee/addEmployeeContract]
    (
    [serviceBroker/example/employee/addEmployee]
    Sent by initiator
    )
    go
    --下面就是我的从队列读取数据并插入到数据库的存储过程。这里使用的是XML转换函数把数据放置到数据库。有两个存储过程:其中一个插入,另一个检查并清空队列。
    create proc addEmployee
    @mb xml
    as
    insert into employee(employeeinfo)
    values(@mb)
    go

    --读取队列的存储过程如下:
    create proc ProcessEmployee
    as
    begin
        begin tran
            declare @ch uniqueidentifier
            declare @mb varbinary(max)
            waitfor
            (
            receive top (1) @ch=conversation_handle,@mb=message_body
                from employeequeue
            ),
            timeout 1500

            execute addEmployee @mb
            end conversation @ch
        commit tran

    end
    --员工就位后需要创建存储数据的队列。创建队列时,需要关联一个用来处理它的服务程序(在本例中就是存储过程)
    create queue [employeequeue]
    with status=on,
    activation
    (
    procedure_name=ProcessEmployee,
    max_queue_readers=5,
    execute as self
    )
    go
    --现在差不多了,接下来需要创建应答会话请求的服务,并把它与前面的约定关联起来:
    create service addemployeeservice
    on queue [employeequeue]
    (
    [serviceBroker/example/employee/addEmployeeContract]
    )
    go
    --现在系统准备好了,可以使用使用sql server management studio 检查这些对像。
    --当服务器准备好service broker会话后,就可以开始一个完整的示例事件了。
    --代码如下:发送
    declare @ch uniqueidentifier
    declare @employeename xml
    set @employeename='<name>mary</name>'

    begin dialog conversation @ch
    from service addemployeeservice
    to service
    '[serviceBroker/example/employee/addEmployeeContract]'
    on contract
    [serviceBroker/example/employee/addEmployeeContract];

    send on conversation @ch
    message type
    [serviceBroker/example/employee/addEmployee] (@employeename)

    go

    ---接收
    GO

    DECLARE @RecvReqDlgHandle UNIQUEIDENTIFIER;
    DECLARE @RecvReqMsg NVARCHAR(100);
    DECLARE @RecvReqMsgName sysname;


    RECEIVE TOP(1)
        @RecvReqDlgHandle = conversation_handle,
        @RecvReqMsg = message_body,
        @RecvReqMsgName = message_type_name
    FROM [employeequeue];

    SELECT @RecvReqMsg AS ReceivedRequestMsg;

    IF @RecvReqMsgName =
       N'serviceBroker/example/employee/addEmployee'
    BEGIN
         DECLARE @ReplyMsg NVARCHAR(100);
         SELECT @ReplyMsg =
         N'<ReplyMsg>Message for Initiator service.</ReplyMsg>';
     
         SEND ON CONVERSATION @RecvReqDlgHandle
              MESSAGE TYPE
              [serviceBroker/example/employee/addEmployee]
              (@ReplyMsg);

         END CONVERSATION @RecvReqDlgHandle;
    END

    SELECT @ReplyMsg AS SentReplyMsg;


    --要检查的话,可以使用动态管理视图

    select * from sys.dm_broker_activated_tasks
    select * from sys.dm_broker_connections
    select * from sys.dm_broker_forwarded_messages
    select * from sys.dm_broker_queue_monitors
    go
    select * from employee
    go
    SELECT * FROM [dbo].[employeequeue]

    GO
  • 相关阅读:
    MongoDB Master-Slave cluster with authentication setup
    Linux Shell Scripting Cookbook 读书笔记 5
    Linux Shell Scripting Cookbook 读书笔记 4
    Linux Shell Scripting Cookbook 读书笔记 3
    Linux Shell Scripting Cookbook 读书笔记 2
    Citrix架构
    Jenkins Kubernetes Slave 调度效率优化小记
    <漫谈ElasticSearch>关于ES性能调优几件必须知道的事
    【反思】一个价值两天的BUG,无论工作还是学习C语言的朋友都看看吧!
    <再看TCP/IP第一卷>TCP/IP协议族中的最压轴戏----TCP协议及细节
  • 原文地址:https://www.cnblogs.com/chillsrc/p/1438195.html
Copyright © 2020-2023  润新知