Service Broker External Activator不处理队列中的所有消息

时间:2013-05-20 11:12:42

标签: sql-server

我已经设置了外部激活器,它执行一个简单的应用程序(作为启动),它所做的只是运行以下sql语句

WAITFOR(receive top(1) * from [dbo].[DBTriggersQueue]), TIMEOUT 5000;

我在表上有一个更新触发器,它会将消息添加到队列中。

我的问题是,如果我运行多个更新脚本(一个接一个地更新4个),它会将消息添加到队列中,而我的SBEA会收到事件通知,但它只接收1-2个事件通知(根据EATrace日志)因此,我的简单应用只能处理2条消息。

有没有人知道在最初的1/2之后SBEA会发送或接收通知的原因是什么?

这似乎与时间有关,因为如果我运行每个更新脚本时只有几秒延迟,那么每次更新和处理的消息都会发送事件通知。

1 个答案:

答案 0 :(得分:1)

激活不是按消息触发的。当你被激活时,你应该接收所有消息。激活后,继续发出RECEIVE语句并处理消息,直到RECEIVE返回空结果集。请访问Understanding When Activation Occurs了解更多详情。