双向 SQL 服务代理

Two-way SQL Service Broker

我正在尝试将 SSB 用作多个分布式逻辑站的全双工消息传递基础设施。 多个站点可以驻留在同一个进程上,也可以驻留在不同的机器上(无关紧要)。 这些站需要通过不断地来回发送消息来相互通信和同步。 站点 运行 作为 Windows 服务的一部分,因此站点的生命周期很长。 站点发送的每个消息都可以指定给单个站点或多个站点或所有站点(广播)。 仅当消息指定给特定电台或广播消息时,该消息才与特定电台相关。

所有 SSB 的 Dialog/Converstation/Group 术语让我很困惑。

我不知道如何确定什么时候应该成为Initiator/Target,因为根据我的情况,每个站点都可以在需要时发送消息,并且应该一直接收相关消息时间.

由于许多站可能会同时向许多其他站发送消息,因此出队时间应尽可能快,并且性能必须最佳。

According to Microsoft,我应该使用许多对话和许多消息以获得最佳性能。 但我不知道何时以及如何创建一个单独的 dialog/conversation,以及对话应该何时结束(如果有的话)。

有人可以阐明这一点,并为我的案子提供正确的方向吗?

谢谢。

假设每个站点都有所有其他站点的清单(这可能需要一些人手!),这应该是可行的。

关于 initiator/target 术语,开始对话的人是发起者,而该消息的收件人是目标。想象一下下面的真实世界对话。我将在发起者发送的任何消息前加上 [I],在目标发送的消息前加上 [T]

  • [I]百货公司你好。告诉我你要买什么样的袜子。
  • [T] 我们出售红色、白色和蓝色的袜子。
  • [I]我要两双红袜子
  • [T] 好的

在那种情况下,只有一个目标,但可以在考虑多个目标的情况下发起给定的对话(在您的 "multiple stations" 或 "broadcast" 场景中)。为了进一步类比,这类似于同时致电多家商店并询问他们所有的袜子库存。

凭直觉你需要知道谁是发起者和目标,上面的对话可以分解为以下消息类型:InventoryRequest、InventoryResponse、PurchaceRequest、PurchaseResponse。如果您将所有这些都捆绑到一份合同中,您应该可以参加比赛了。