启动和停止队列

适用于:SQL ServerAzure SQL 托管实例

使用 ALTER QUEUE 语句可以启动和停止队列。 队列启动后,即可用于发送和接收消息。 队列停止时,Service Broker 不向该队列传递新消息,也不允许应用程序从该队列接收消息。

管理员通常将队列创建为不可用状态。 这可以防止在服务的所有对象创建完毕之前,Service Broker 将消息放入该队列。 当服务就绪,可以接收消息时,管理员可以使用以下语句使队列可用:

    ALTER QUEUE dbo.ExpenseQueue WITH STATUS = ON ;

下面的语句使队列不能接收消息:

    ALTER QUEUE dbo.ExpenseQueue WITH STATUS = OFF ;

当队列不能用于接收消息时,应用程序无法处理队列中的消息。 因为 Service Broker 保证只能在接收操作中从队列提取消息,所以无法从已停止的队列中删除消息。 Service Broker 设计为允许在维护的同时,队列可以继续接收消息,因此队列可用后,极少需要将其停止。 因为在 RECEIVE 操作失败时或没有其他可用消息时,大多数激活存储过程将退出,所以停止队列的一个原因是要将激活存储过程替换为一个持续接收消息的服务。

如果消息要送达的队列不可用,则 Service Broker 将消息保存在数据库的传输队列中,而不是将消息传递给该队列。

另请参阅