【问题标题】:How to reduce flooding a Service Broker queue?如何减少服务代理队列的泛滥?
【发布时间】:2009-03-23 19:02:22
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-05
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        相关资源
        最近更新 更多