• Serivce Broker 简单实用


    -- 创建要使用的数据库
    Create Database HelloWorldDB
    go
    Use HelloWorldDB
    go
    -- 创建要使用的两种消息类型。我们要使用的消息将是
    --
    字符串而不是 XML - 因此无需进行验证
    CREATE MESSAGE TYPE [HelloWorldRequest] VALIDATION = NONE
    CREATE MESSAGE TYPE [HelloWorldResponse] VALIDATION = NONE
    -- 创建一个限制此对话框中消息类型
    --
    的规范。请求由对话框的初始化程序发出
    --
    响应消息由对话框目标发送。
    CREATE CONTRACT [HelloWorldContract]
    (
    [HelloWorldRequest] SENT BY initiator,
    [HelloWorldResponse] SENT BY target
    )
    -- 创建对话框在其间通信的两个队列。A
    --
    对话框请求两个队列。
    CREATE QUEUE [HelloWorldTargetQueue]
    CREATE QUEUE [HelloWorldInitiatorQueue]
    -- 创建命名对话框端点的服务。服务会将
    --
    会话端点连接到队列。
    CREATE SERVICE [HelloWorldRequestService] ON QUEUE [HelloWorldTargetQueue]
    (
    [HelloWorldContract]
    )
    CREATE SERVICE [HelloWorldResponseService] ON QUEUE [HelloWorldInitiatorQueue]
    go





    Use HelloWorldDB
    go
    SET NOCOUNT ON
    DECLARE @conversationHandle uniqueidentifier
    Begin Transaction
    -- 开始 Hello World 服务的对话
    BEGIN DIALOG @conversationHandle
    FROM SERVICE [HelloWorldResponseService]
    TO SERVICE 'HelloWorldRequestService'
    ON CONTRACT [HelloWorldContract]
    WITH ENCRYPTION = OFF, LIFETIME = 600;
    -- 发送消息
    SEND ON CONVERSATION @conversationHandle
    MESSAGE TYPE [HelloWorldRequest] (N'Hello World')
    commit





    Use HelloWorldDB
    go
    -- 检查目标队列以确认消息已送达
    select * from [HelloWorldTargetQueue]
    go
    -- 将消息主体转换为字符串,以便我们查看其中包含的内容
    select cast(message_body as nvarchar(MAX)) from [HelloWorldTargetQueue]
    go



    -- 使用 Receive 命令可从队列接收消息
    --
    声明变量以存储接收到的数据
    SET NOCOUNT ON
    DECLARE @conversationHandle uniqueidentifier
    declare @message_body nvarchar(MAX)
    declare @message_type_name sysname;

    -- Service Broker 命令总是位于事务中
    Begin Transaction;

    -- Receive 命令的格式类似于一个选择列表。首先列出
    --
    要获取的列,然后指定要从中获取消息
    --
    的队列
    RECEIVE top(1) -- 只接收一条消息,因此我们可以直接保存到变量中。
    @message_type_name=message_type_name,
    -- 接收的消息类型
    @conversationHandle=conversation_handle,
    -- 对话的标识符
    --
    我们通过下列语句接收该消息
    @message_body=message_body
    -- 作为
    --
    varbinary(MAX) blob 的消息内容
    FROM [HelloWorldTargetQueue]

    print @message_body

    -- 如果这是一条 hello world 消息,则用相应的问候语回答
    if @message_type_name = N'HelloWorldRequest'
    Begin
    SEND ON CONVERSATION @conversationHandle
    -- 使用下列消息接收语句的相同会话
    MESSAGE TYPE [HelloWorldResponse]
    (N'Hello From '+@@servername )
    -- 这是我们希望从初始化程序接收的唯一消息,因此
    --
    现在可以安全地结束对话。
    END CONVERSATION @conversationHandle
    End
    -- 提交事务
    --
    如果此时我们回滚,所有内容将退回到
    --
    我们开始时的状态 – 消息会返回到队列,并且没有发送响应
    Commit
    go
    -- 确认我们从队列中删除了消息
    select cast(message_body as nvarchar(MAX)) from [HelloWorldTargetQueue]
    go






    Use HelloWorldDB
    go

    select cast(message_body as nvarchar(MAX)) from [HelloWorldInitiatorQueue]
    go



    RECEIVE
    cast(message_body as nvarchar(MAX))
    FROM [HelloWorldInitiatorQueue]
  • 相关阅读:
    7.ps相关选项
    6.ps的大U和小u区别
    5.进程优先级
    4.状态间的六种转换情况
    3.进程的不同状态
    2.进程与程序的关系
    1.进程概念
    不换行
    for引用变量
    脚本进阶
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/2249652.html
Copyright © 2020-2023  润新知