导读:本期聚焦于小伙伴创作的《什么是SQL Server Service Broker?新手如何快速上手SSB入门实例?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《什么是SQL Server Service Broker?新手如何快速上手SSB入门实例?》有用,将其分享出去将是对创作者最好的鼓励。

SQL Server Service Broker(简称SSB)是SQL Server数据库引擎内置的异步消息队列组件,不需要额外安装第三方中间件就能实现数据库内部的可靠消息传递,适合处理需要解耦、异步执行的业务场景,比如订单创建后异步通知库存系统、批量任务的分发执行等。

什么是SQL Server Service Broker?新手如何快速上手SSB入门实例?

SSB核心概念说明

在搭建实例前需要先了解SSB的几个核心对象,这些对象共同构成了SSB的消息处理链路:

  • 消息类型(Message Type):定义消息的格式规范,用来校验发送和接收的消息是否符合约定
  • 约定(Contract):指定哪些消息类型可以被哪些角色发送和接收,明确消息交互的规则
  • 队列(Queue):存储接收到的消息的容器,消息会暂时存放在队列中等待处理
  • 服务(Service):将队列和约定绑定,是消息发送和接收的端点

SSB入门实例完整步骤

1. 开启数据库SSB功能

首先需要在目标数据库中启用Service Broker功能,执行以下SQL语句:

-- 启用数据库的Service Broker,替换YourDatabase为实际数据库名
ALTER DATABASE YourDatabase SET ENABLE_BROKER;
-- 可选:设置信任数据库,方便后续跨库消息传递
ALTER DATABASE YourDatabase SET TRUSTWORTHY ON;

2. 定义消息类型和约定

先创建消息类型,再基于消息类型创建约定,这里定义一个简单的文本消息类型:

-- 创建消息类型,指定消息校验方式为无校验,适合简单文本消息
CREATE MESSAGE TYPE SampleMessageType
VALIDATION = NONE;

-- 创建约定,指定发起方可以发送SampleMessageType类型的消息,接收方可以接收该类型消息
CREATE CONTRACT SampleContract
(
    SampleMessageType SENT BY INITIATOR
);

3. 创建队列和服务

分别创建发送端和接收端的队列与服务,发送端服务用于发送消息,接收端服务用于接收消息:

-- 创建发送端队列
CREATE QUEUE SendQueue;
-- 创建发送端服务,绑定发送队列和约定
CREATE SERVICE SendService
ON QUEUE SendQueue
(
    SampleContract
);

-- 创建接收端队列
CREATE QUEUE ReceiveQueue;
-- 创建接收端服务,绑定接收队列和约定
CREATE SERVICE ReceiveService
ON QUEUE ReceiveQueue
(
    SampleContract
);

4. 发送测试消息

使用SEND语句向接收端服务发送消息,代码如下:

-- 定义会话句柄变量
DECLARE @dialog_handle UNIQUEIDENTIFIER;
-- 开始一个对话,指定发起方服务、目标服务和使用的约定
BEGIN DIALOG CONVERSATION @dialog_handle
FROM SERVICE SendService
TO SERVICE 'ReceiveService'
ON CONTRACT SampleContract
WITH ENCRYPTION = OFF;

-- 发送消息,消息内容为文本格式的测试内容
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE SampleMessageType
('这是第一条SSB测试消息');

-- 结束对话
END CONVERSATION @dialog_handle;

5. 接收并处理消息

从接收端队列中读取消息,处理完成后结束对话,代码如下:

-- 定义接收消息的变量
DECLARE @message_body NVARCHAR(MAX);
DECLARE @dialog_handle UNIQUEIDENTIFIER;
DECLARE @message_type NVARCHAR(256);

-- 从接收队列中接收消息,TOP(1)表示只取一条消息
RECEIVE TOP(1)
    @message_body = message_body,
    @dialog_handle = conversation_handle,
    @message_type = message_type_name
FROM ReceiveQueue;

-- 输出接收到的消息内容
SELECT @message_body AS 接收到的消息内容;

-- 如果对话还在,结束对话
IF @dialog_handle IS NOT NULL
BEGIN
    END CONVERSATION @dialog_handle;
END

实例验证与注意事项

执行完发送消息的SQL后,再执行接收消息的SQL,应该能看到输出的消息内容为“这是第一条SSB测试消息”,说明整个SSB实例运行正常。

需要注意的几个点:

  • 对话必须显式结束,否则会留下未结束的会话占用系统资源
  • 如果消息类型设置了校验规则,发送的消息必须符合规则否则会报错
  • 队列中的消息如果没有被接收,会一直存储在队列中,需要定期处理避免队列堆积

简单应用场景说明

这个入门实例可以扩展到实际业务中,比如用户下单后,业务层只需要向SSB发送一个订单消息,后台的库存处理服务、积分服务可以分别从队列中接收消息处理自己的逻辑,不需要业务层逐个调用不同服务的接口,实现了业务解耦。如果需要更复杂的场景,还可以结合SQL Server的存储过程、作业来定时处理队列中的消息,实现可靠的异步任务执行。

SQL_Server_Service_BrokerSSB数据库消息队列Service_Broker入门修改时间:2026-07-02 14:48:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。