我已经设置了外部激活器,它执行一个简单的应用程序(作为启动),它所做的只是运行以下sql语句
WAITFOR(receive top(1) * from [dbo].[DBTriggersQueue]), TIMEOUT 5000;
我在表上有一个更新触发器,它会将消息添加到队列中。
我的问题是,如果我运行多个更新脚本(一个接一个地更新4个),它会将消息添加到队列中,而我的SBEA会收到事件通知,但它只接收1-2个事件通知(根据EATrace日志)因此,我的简单应用只能处理2条消息。
有没有人知道在最初的1/2之后SBEA会发送或接收通知的原因是什么?
这似乎与时间有关,因为如果我运行每个更新脚本时只有几秒延迟,那么每次更新和处理的消息都会发送事件通知。
答案 0 :(得分:1)
激活不是按消息触发的。当你被激活时,你应该接收所有消息。激活后,继续发出RECEIVE语句并处理消息,直到RECEIVE返回空结果集。请访问Understanding When Activation Occurs了解更多详情。