如何减少泛滥Service Broker队列?

时间:2009-03-23 19:02:22

标签: sql-server sql-server-2005 service-broker

我是使用SQL Service 2005 Service Broker的新手。我已经创建了队列并且成功地进行了对话等等。但是,我想要点击“节流”消息,我不知道该怎么做。

消息由存储过程发送,由多用户应用程序调用。假设有20个用户在30秒的时间内调用此proc一次,它只需要发送一次。所以我想我需要从我的proc中获取一些方法来查看是否在过去30秒内发送了一条消息?有没有办法做到这一点?

我的一个想法是向“响应”队列发送消息,指示是否已调用请求队列激活过程。然后在我的存储过程中(由用户app调用)查看最近是否已调用该特定消息。问题是我不希望这会弄乱响应队列。可以查看队列(不接收)以查看其中是否存在消息?

或者有更简单的方法来完成我所追求的目标吗?

2 个答案:

答案 0 :(得分:4)

是的,你可以偷看队列,看看手中是否有消息。只需使用SELECT而不是RECEIVE查询队列,您就可以查看数据。

更好的选择是发送消息并让接收消息的存储过程决定消息是否应该被丢弃。

我一次向服务代理发送数十万条消息,没有任何性能问题。

如果您看到性能问题,请尝试为每个对话发送多条消息,因为这是提高Service Broker性能的最快捷,最简单的方法。

答案 1 :(得分:1)

不确定你是否可以在某种程度上在SB中执行此操作,但是你可以只在其中有一个带有时间戳字段的表,该表在发送消息时已更新。 proc将检查>的时间差异。 30秒并发送。