服务代理消息流

Service Broker message flow

我在两个位置有两个不同的服务器。我需要使用异步数据交换。

服务器 B 上的每个生产操作都有一个生产组。我需要做的是:

  1. A 发消息给B 有一个问题:今天在这个组(GUID)中计划进行什么操作。
  2. B 必须回答 XML 今天安排的操作列表。
  3. A 必须回答一个 XML 要取消的操作列表
  4. B 必须取消操作并结束对话

我的问题是:解决这个问题的正确方法是什么?我可以使用一份合同在一个对话中完成吗?我应该吗?

有了这样的合同:

CREATE CONTRACT [GetScheduledContract] 
AUTHORIZATION [xxx]
(GetScheduledOutCalls SENT BY INITIATOR,
ReturnScheduledOutCalls SENT BY TARGET,
DeleteScheduledOutCalls SENT BY INITIATOR)

或者我应该将任务分离到不同的合同和对话中吗?

作为 MVP,你所拥有的东西对我来说似乎很好(即,如果一切顺利,它就会起作用)。几件事:

  1. 考虑在结束对话之前再添加一个来自目标 "operation completed successfully" 的回复。收到后,发起人也可以关闭他们的结尾。
  2. 如果这些操作中的任何一个明确无法完成(例如,在您的第 4 步中,请求是删除不存在的内容或删除导致外键违规的内容),会发生什么情况?我会添加某种错误消息类型 (sent by any),允许任何一方告诉另一方 "hey… something went wrong".
  3. 如果这些操作中的任何一个隐含地无法完成(例如,消息永远不会送达),会发生什么情况?对方可能因为某种原因不回应。以某种方式构建,至少可以检测并发出警报。