zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/Amaranthus/p/2249652.html
Copyright © 2011-2022 走看看