首页 > 数据库 >未启用当前数据库的 sql server service broker

未启用当前数据库的 sql server service broker

时间:2023-07-23 20:04:45浏览次数:32  
标签:service Service -- 步骤 Broker broker 消息 创建 server

如何启用 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,并使用存储

标签:service,Service,--,步骤,Broker,broker,消息,创建,server
From: https://blog.51cto.com/u_16175474/6827825

相关文章

  • 为什么 idea连接 sql server 连接成功却显示不出来表?
    为什么IDEA连接SQLServer连接成功却显示不出来表?概述在使用IDEA连接SQLServer数据库时,有时候会遇到连接成功,但无法显示出表的情况。这个问题通常是由于配置不正确或者依赖缺失引起的。下面将详细介绍整个问题的解决流程以及每一步需要做的操作。解决流程步骤操作......
  • json-server
    前端必备技能:json-server全攻略在项目的初始阶段,后端提供的接口或数据可能是不完整的,作为一名前端开发工程师,不可避免的要使用mock的数据。如果此时的你不想使用简单的静态数据,而是想自己在本地启动一个server来模拟请求相关的操作,那么json-server是一个不错的选择。json-serve......
  • SQL Server 的网络通信机制
    问题我试图了解SQLServer如何在网络上进行通信,因为我必须告诉我的网络团队在防火墙上打开哪些端口,以便边缘Web服务器与内部的SQLServer进行通信。我需要知道什么? 解决方案为了了解需要在哪里打开什么,我们首先简单谈谈当今常用的两个主要协议:TCP-传输控制协议UDP......
  • 解决无法打开到 SQL Server 的连接错误
    一、问题描述有时,您可能会在连接到SQLServer时遇到问题,并且可能会收到如下消息: 这些错误可能是针对 命名管道连接或 TCP/IP连接。在本技巧中,我们将探讨导致这些错误的原因以及解决方法。二、解决方案您收到这些错误消息的原因可能有多种。请按照以下步骤查看是否可......
  • tivation Service 通信时出现严重错误。该进程 ID 为“XXXX”。数据字段包含错误号。
    困扰我大半年的错误,今天偶然间被解决了,特此分享给被同样问题纠结的朋友们!之前的求助帖,无人应答:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.htmlhttp://bbs.csdn.net/topics/391988642症状日志中大量报错,IIS严重错误,此类错误默认情况下5分钟连续出现5次会......
  • sql server 大数据复制到另一张表
    SQLServer大数据复制到另一张表在日常的数据库操作中,我们经常需要将一个表中的数据复制到另一个表中,这在数据分析、数据备份等场景下非常常见。本文将介绍如何使用SQLServer将一个表中的大量数据复制到另一个表中,同时提供相应的代码示例。1.创建目标表首先,我们需要在数据......
  • spark开启historyserver
    Spark开启HistoryServer简介在使用ApacheSpark进行大数据处理时,我们常常需要查看作业的执行历史和性能指标。Spark提供了一个称为HistoryServer的组件,它能够保存和展示Spark应用程序的执行历史数据。本文将介绍如何开启Spark的HistoryServer,并提供详细的步骤和代码示例。步......
  • C#动态库调用webservice
    1.c#调用一外部webservice时,对方能收到数据包,缺收不到正确数据,报莫名错误。对方也不知道原因。只能采用动态调用方式。采用如下类:1publicclassWebserviceHelper2{3///<summary>4///动态调用web服务5///</summary>6......
  • file /usr/share/mysql/charsets/macroman.xml from install of MySQL-server-5.6
    MySQL服务器和字符集在使用MySQL数据库时,字符集是一个非常重要的概念。它决定了数据库中存储的数据如何表示和解释。MySQL支持多种字符集,每个字符集都有自己的编码方式和规则。在安装MySQL服务器时,我们可能会遇到如下错误提示信息:file/usr/share/mysql/charsets/macroma......
  • 如何在 SQL Server 2016 中为可用性组配置只读路由
    SQLServerAlwaysOn可用性组概念在SQLServer2012中首次引入,作为企业级高可用性和灾难恢复解决方案,将取代数据库镜像功能。AlwaysOnAvailabilityGroup在组级别提供高可用性解决方案,其中每个组可以包含任意数量的数据库,这些数据库可以复制到多个辅助服务器(称为副本)。SQL......