2

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

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

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

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

4

2 回答 2

4

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

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

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

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

于 2009-04-06T08:17:46.533 回答
1

不确定您是否可以以某种方式在 SB 中执行此操作,但是您是否可以只拥有一个包含时间戳字段的表,该表在发送消息时会更新。proc 将检查 > 30 秒的时间差异并发送。

于 2009-03-23T20:31:13.377 回答