使用 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 将消息保存在数据库的传输队列中,而不是将消息传递给该队列。