我有一个场景,外部应用程序正在监视一个队列,然后当某些事情被放入队列时采取行动。 我只是把它封装在一个事务内部,如果这个操作失败了,就试图阻止事情离开队列。 发生什么事情是,在某些情况下,如果在应用程序中导致事务回滚失败,队列将被禁用。
我正在寻找的是在不打开SQL Server Management Studio的情况下启用队列的方法。
如果连续5个RECEIVE语句被回滚,那么毒害信息检测将会被触发。 没有办法使这个变成disble,也没有办法在队列读取器中重新启用队列。 由于禁用是asynchronous的,因此可以在逻辑尝试重新启用禁用的队列后禁用队列。
正确的解决scheme是不要故意回滚,并处理所有的错误。 但是,这并不总是可能的 。 我的build议是在QUEUE_DISABLED事件的队列上挂上一个事件通知 。 这将触发通知,您可以对此通知作出反应。
队列可以重新启用:
ALTER QUEUE [queuename] WITH STATUS = ON;