多路复用 Service Broker 消息

Multiplexing Service Broker messages

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

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

  1. 你是想单独检查你的消息(无论是否发送)或者你想从某个案例或某个人回滚
  2. 在发送过程中你要统计还是做点什么

你的第一种方法就像一台机器gun.In小的情况下它不会在服务器中产生压力或数据丢失但在大的情况下我不能给你保证(我的意思是像机枪一样,服务器会卡住).

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

  1. 他们关联的对话端点的优先级。
  2. 在优先级内,他们在对话中的发送顺序。

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

对于本地发货,在通常不涉及sys.transmission_queue的情况下,不会有太大的区别。