2016-09-10 75 views
0

我注意到在SEND语句的文档中它允许一次在多个对话句柄上发送相同的消息。假设在我的情况下,我想发送给定消息的地方数量很少(少于5个),但是我想发送的每条消息都应该发送到所有这些地方。是否有以下任何实际区别:复用Service Broker消息

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); 

回答

1

SEND ON (@h1, @h2, @h3, ... , @hN)将仅在sys.transmission_queue中存储邮件正文一次。与SEND ON (@h1),SEND ON (@h2),...,SEND ON (@hN)相反,它将存储消息正文N次。这基本上是真正的区别。如果邮件正文的大小很大,它可能会对perf有显着的影响。

对于本地交付,当通常不涉及sys.transmission_queue时,不会有显着差异。

+0

这就是我怀疑的(并将要证实)。我的问题是,我决定在运行时发送哪个句柄(通过数量方式),这意味着要动态地创建发送语句。不可撤销,但也不理想。 –

0

我依赖于你的需求,正如你所说,你只有五次转换,你可以两种方式。他们之间没有区别......但这里是抓

  1. 你继电器要单独查询您的信息(是否去与否),或者你想从某些情况下,或个人,你想
  2. 执行回滚计数或做一些在发送过程

你的第一个办法是像一台机器gun.In小的情况下,它不会产生压力或服务器数据丢失,但在大的情况下,我不能给你担保(我意思就像机枪一样,服务器做堵塞)。在一个实例发送队列

的消息序列中基于发送:

  1. 它们相关联的会话端点的优先级。
  2. 在优先级内,它们在对话中的发送顺序。
相关问题