【发布时间】:2017-08-15 20:00:49
【问题描述】:
使用基于here的基础
Service Broker 提供自动中毒消息检测。如果从队列接收消息的事务回滚五次,则自动有害消息检测会将队列状态设置为 OFF。此功能可防止应用程序无法以编程方式检测到的灾难性故障。
我有一个 Windows 服务应用程序,它轮询 SB 队列并将它们发送到 Web 服务端点。因为,我应该处理任何“服务器关闭”问题─将消息返回到队列,所以我包括“队列项目接收”和“队列项目发送”方法进入同一笔交易。在第一个异常 (HttpRequestException) 上,我开始 ping 服务器以获得预定义的超时,然后继续/关闭程序。
但是,回滚五次是一个问题,我知道无论 5 次连续回滚之间的时间间隔如何,它总是会全局增加回滚计数,因此最终将禁用队列。我说得对吗?队列是否有将回滚计数归零的超时?
如果这是这种行为,是否最好从事务中排除“队列项目发送”方法? 如果我这样做,我应该遵循这样的方法,在异常情况下将消息保存在另一个资源(表、文件)中以便稍后发送,或者其他替代方案...
using tables as queues 如何让我的事务保持统一并摆脱 SB 的回滚问题?它会像SB一样可靠吗?
【问题讨论】: