如何启用 SQL Server Service Broker

流程概述

以下是启用 SQL Server Service Broker 的步骤:

步骤 描述
步骤 1 检查数据库的兼容性级别
步骤 2 启用数据库的 Service Broker
步骤 3 创建 Service Broker 对象
步骤 4 启用 Service Broker 消息传递
步骤 5 创建消息队列
步骤 6 创建消息处理程序
步骤 7 创建消息发送程序
步骤 8 发送和接收消息

详细步骤及代码

步骤 1:检查数据库的兼容性级别

首先,确保数据库的兼容性级别符合要求。Service Broker 需要数据库兼容性级别至少为 90 或更高。

-- 检查数据库兼容性级别
SELECT compatibility_level
FROM sys.databases
WHERE name = '<数据库名>';

步骤 2:启用数据库的 Service Broker

接下来,启用数据库的 Service Broker 功能。

-- 启用 Service Broker
ALTER DATABASE <数据库名> SET ENABLE_BROKER;

步骤 3:创建 Service Broker 对象

创建 Service Broker 所需的消息类型、对话和合同。

-- 创建消息类型
CREATE MESSAGE TYPE <消息类型名称>
    VALIDATION = NONE;

-- 创建对话合同
CREATE CONTRACT <合同名称>
    (<消息类型名称> SENT BY INITIATOR);

-- 创建服务
CREATE SERVICE <服务名称>
    ON QUEUE <队列名称>
    (<合同名称>);

-- 创建发送端结束点
CREATE ENDPOINT <发送端结束点名称>
    STATE = STARTED
    AS TCP (LISTENER_PORT = <监听端口号>)
    FOR SERVICE_BROKER (<服务名称>);

步骤 4:启用 Service Broker 消息传递

启用 Service Broker 消息传递以允许消息在数据库之间传递。

-- 启用消息传递
ALTER ENDPOINT <发送端结束点名称> STATE = STARTED;

步骤 5:创建消息队列

创建用于存储待处理消息的队列。

-- 创建队列
CREATE QUEUE <队列名称>;

步骤 6:创建消息处理程序

创建用于处理由 Service Broker 接收的消息的存储过程。

-- 创建消息处理程序
CREATE PROCEDURE <处理程序名称>
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @message_body VARBINARY(MAX);
    DECLARE @conversation_handle UNIQUEIDENTIFIER;
    DECLARE @message_type_name NVARCHAR(256);

    WHILE (1 = 1)
    BEGIN
        -- 从队列中获取消息
        WAITFOR (
            RECEIVE TOP(1)
                @message_body = message_body,
                @conversation_handle = conversation_handle,
                @message_type_name = message_type_name
            FROM <队列名称>
        ), TIMEOUT 1000;

        -- 检查消息类型
        IF @message_type_name = '<消息类型名称>'
        BEGIN
            -- 处理消息
            -- TODO: 处理代码
        END;

        -- 结束对话
        END CONVERSATION @conversation_handle;
    END;
END;

步骤 7:创建消息发送程序

创建用于发送消息到 Service Broker 的存储过程。

-- 创建消息发送程序
CREATE PROCEDURE <发送程序名称>
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @conversation_handle UNIQUEIDENTIFIER;
    DECLARE @message_type_name NVARCHAR(256);

    -- 开始对话
    BEGIN DIALOG CONVERSATION @conversation_handle
        FROM SERVICE <服务名称>
        TO SERVICE '<目标服务>'
        ON CONTRACT <合同名称>
        WITH ENCRYPTION = OFF;

    -- 发送消息
    SEND ON CONVERSATION @conversation_handle
        MESSAGE TYPE <消息类型名称>
        (<消息内容>);
        
    -- 结束对话
    END CONVERSATION @conversation_handle;
END;

步骤 8:发送和接收消息

使用消息发送程序发送消息,并使用消息处理程序接收和处理消息。

-- 发送消息
EXEC <发送程序名称>;

-- 接收和处理消息
EXEC <处理程序名称>;

总结

通过以上步骤,您可以成功启用 SQL Server Service Broker,并使用存储