多路复用Service Broker消息

时间:2016-09-10 21:24:40

标签: sql-server service-broker

我在SEND语句的文档中注意到它允许一次在多个会话句柄上发送相同的消息。让我们说在我的情况下,我想发送给定消息的地方数量很少(少于5个),但我想要发送的每条消息都应该转到所有这些地方。以下是否存在实际差异:

declare @ch1 uniqueidentifier,
    @ch2 uniqueidentifier,
    @ch3 uniqueidentifier,
    @message xml;

-- approach #1
send on conversation (@ch1, @ch2, @ch3)
    message type [foo]
    (@message);

-- approach #2
send on conversation (@ch1)
    message type [foo]
    (@message);

send on conversation (@ch2)
    message type [foo]
    (@message);

send on conversation (@ch3)
    message type [foo]
    (@message);

2 个答案:

答案 0 :(得分:1)

SEND ON (@h1, @h2, @h3, ... , @hN)将仅在sys.transmission_queue中存储邮件正文一次。与SEND ON (@h1)SEND ON (@h2),...,SEND ON (@hN)相对,后者将存储邮件正文N次。这基本上就是真正的区别。如果邮件正文大小很大,则会对性能产生明显影响。

对于本地递送,当通常不涉及sys.transmission_queue时,将没有显着差异。

答案 1 :(得分:0)

我取决于你的需要,正如你所说,你只有五次转换,你可以双向进行。它们之间没有区别......但这里有捕捉

  1. 你是否转发想要单独检查你的信息(是否去过)或你想从某些案件或个人回滚
  2. 您想在发送过程中计算或执行某些操作
  3. 你的第一种方法就像机枪一样。在小的情况下,它不会在服务器中产生压力或数据丢失但在大的情况下我不能给你保证(我的意思是机枪,服务器做堵塞)。

    实例的传输队列中的消息按顺序传输:

    1. 关联会话端点的优先级。
    2. 在优先级内,在会话中发送序列。