创建 Service Broker 队列

队列保留服务的传入消息。为简化处理,应用程序通常为每个服务创建一个队列而不是为多个服务使用相同的队列。

为队列设置保持期选项将导致消息经过处理之后会保留下来。因为保持期会降低应用程序性能,所以仅当应用程序需要持续访问发送和接收的确切消息时才指定保持期。有关消息保持期的详细信息,请参阅消息保持

对于不使用内部激活的应用程序,请勿对队列定义指定激活子句。

对于使用内部激活的应用程序,队列定义包括存储过程的名称、要启动的最大 SQL Server 读取器数以及启动存储过程之前模拟的数据库主体的名称。

队列名称不包括在消息的网络格式中。队列是属于架构的对象。因此,队列名称遵循 SQL Server 命名约定。有关命名的详细信息,请参阅 命名 Service Broker 对象

存储过程激活

队列可以与存储过程相关联。当队列中有要处理的消息时,SQL Server 将激活存储过程。该自动激活过程允许 Service Broker 应用程序根据应用程序当前的处理负荷进行动态缩放。每个由 Service Broker 激活的存储过程均在单独线程中运行。队列指定存储过程后,Service Broker 将根据需要启动该存储过程的新实例,最多可启动为队列指定的最大实例数。

激活的存储过程通常处理一条或多条消息,并对生成该消息的服务返回一个响应。如果消息到达的速度高于存储过程处理消息的速度,Service Broker 将启动存储过程的另一个实例,最多可启动队列定义的最大数目。通常当激活的存储过程有一段时间在队列上未发现消息时,该过程会退出。

使用激活存储过程是设计 Service Broker 应用程序的一种常用方式。然而,其他设计可能更适合特定应用程序的需求。可以在 SQL Server 中运行 Transact-SQL 批的任何应用程序均可发送和接收消息。消息也可以由任何存储过程进行处理,而与该存储过程是否由 SQL Server 激活、由 SQL Server Agent 启动、由外部应用程序运行还是从诸如 SQL Server Management Studio 或 SQL Server ExpressManagement Studio 之类的工具中交互运行无关。