zoukankan      html  css  js  c++  java
  • SqlServer service broker 分布式系统(赵松桃)跳水 2005 数据库编程

    1.创建一个测试数据库

    create database ServerbrokerTest
    on primary(
    name=ServerbrokerTest_data,
    filename='C:Program FilesMicrosoft SQL ServerMSSQL11.SQLEXPRESSMSSQLDATAServerbrokerTest_data.mdf',
    size=5,
    maxsize=unlimited,
    filegrowth=1
    )
    Log on
    (
    name=student_log,
    filename='C:Program FilesMicrosoft SQL ServerMSSQL11.SQLEXPRESSMSSQLDATAServerbrokerTest_log.ldf',
    size=1,
    maxsize=20,
    filegrowth=3
    )

    2.激活数据库的broker功能

    SELECT IS_BROKER_ENABLED FROM MASTER.SYS.DATABASES
    WHERE NAME='ServerbrokerTest';

    成功:,说明已经激活

    若不成功: ALTER DATABASE DB_BROKERTEST SET ENABLE_BROKER  激活broker功能 将其激活

    3.定义消息类型

    --定义消息类型,必须是格式正确的xml
    USE ServerbrokerTest
    GO
    CREATE MESSAGE TYPE 
    MessageTypeEMail --消息类型名
    VALIDATION = WELL_FORMED_XML  --验证为标准xml格式

    4.定义约定  定义约定名称为 ContractEMail 约定的全部者为dbo. SENT BY 用户指定哪个端点能够发送所指示的消息类型的消息.约定将记录服务能够用来拥有特定会话的消息.每一个会话都有两个端点:发起方端点(启动会话的服务)和目标端点(发起方要联系的服务).ANY代表随意.

    --定义约定(消息类型和传递方向)


    USE ServerbrokerTest
    GO
    CREATE CONTRACT ContractEMail
    AUTHORIZATION dbo
    (MessageTypeEMail SENT BY ANY)

    5.定义队列

    --定义队列  消息发出队列
    USE ServerbrokerTest
    GO
    CREATE QUEUE dbo.QueueSENDEMail

    --定义队列  接收消息的队列
    USE ServerbrokerTest
    GO
    CREATE QUEUE dbo.QueueRECEIVEEMail

    6.定义服务

    --定义服务,该服务为消息发出服务,使用消息发出队列
    USE ServerbrokerTest
    GO
    CREATE SERVICE ServiceSendEMail
    AUTHORIZATION dbo ON QUEUE dbo.QueueSENDEMail

    --定义服务。该服务为消息接收服务,使用接收消息队列
    USE ServerbrokerTest
    GO
    CREATE SERVICE ServiceReceiveEMail
    AUTHORIZATION dbo ON QUEUE dbo.QueueRECEIVEEMail

    7.定义路由

    --因为这里使用的是同一个SqlServer 实例上的同一个数据库,所以能够使用默认的路由
    USE ServerbrokerTest
    GO
    CREATE ROUTE AutoCreatedLocal
    AUTHORIZATION dbo WITH ADDRESS = N'LOCAL'

    8.编写主程序

    在定义好上述Service Broker 对象后,我们能够编写一段SQL代码来完毕消息异步传送和接收.

    --编写主程序
    --在定义好上述Service Broker 对象后,我们能够编写一段SQL代码来完毕消息异步传送和接收
    --开启事务
    USE ServerbrokerTest
    GO
    BEGIN TRAN
    --定义会话变量
    DECLARE @dialogid uniqueidentifier
    DECLARE @emailmessage XML
    --启动会话
    BEGIN  DIALOG CONVERSATION @dialogid
     FROM SERVICE ServiceSendEMail
     TO SERVICE 'ServiceReceiveEMail'
     ON CONTRACT ContractEMail
     WITH ENCRYPTION =OFF  --加密功能关闭
     --定义消息变量及内容
     
     SET @emailmessage=N'<emailcontent>欢迎使用Service Broker </emailcontent>';
     
     SEND ON CONVERSATION @dialogid
     MESSAGE TYPE MessageTypeEMail
     (@emailmessage);
    --结束回话
    END CONVERSATION @dialogid
    --提交事务
    COMMIT TRAN
    --查询队列的内容]
     
    SELECT * FROM   dbo.QueueSENDEMail
    SELECT * FROM   dbo.QueueRECEIVEEMail

    SqlServer2012查询队列为空,我不知道该怎么办?

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    SQL 递归查询(根据指定的节点向上获取所有父节点,向下获取所有子节点)
    限流脚本
    使用DANT做FTP的转发代理
    忘记token怎么加入k8s集群
    CentOS7.x使用overlay2文件系统
    文件已删除但句柄没有释放导致磁盘空间用完
    多线程学习(一)什么是多线程?
    自己用过的web软件tools软件以及玩过的游戏
    day1 学习历程
    git合并请求
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4881435.html
Copyright © 2011-2022 走看看