服务代理消息流
Service Broker message flow
我在两个位置有两个不同的服务器。我需要使用异步数据交换。
- 服务器A是我们的数据服务器,我们在这里存储客户信息。
- 服务器B是我们的加工服务器,我们加工生产。
服务器 B 上的每个生产操作都有一个生产组。我需要做的是:
- A 发消息给B 有一个问题:今天在这个组(GUID)中计划进行什么操作。
- B 必须回答 XML 今天安排的操作列表。
- A 必须回答一个 XML 要取消的操作列表
- B 必须取消操作并结束对话
我的问题是:解决这个问题的正确方法是什么?我可以使用一份合同在一个对话中完成吗?我应该吗?
有了这样的合同:
CREATE CONTRACT [GetScheduledContract]
AUTHORIZATION [xxx]
(GetScheduledOutCalls SENT BY INITIATOR,
ReturnScheduledOutCalls SENT BY TARGET,
DeleteScheduledOutCalls SENT BY INITIATOR)
或者我应该将任务分离到不同的合同和对话中吗?
作为 MVP,你所拥有的东西对我来说似乎很好(即,如果一切顺利,它就会起作用)。几件事:
- 考虑在结束对话之前再添加一个来自目标 "operation completed successfully" 的回复。收到后,发起人也可以关闭他们的结尾。
- 如果这些操作中的任何一个明确无法完成(例如,在您的第 4 步中,请求是删除不存在的内容或删除导致外键违规的内容),会发生什么情况?我会添加某种错误消息类型 (
sent by any
),允许任何一方告诉另一方 "hey… something went wrong".
- 如果这些操作中的任何一个隐含地无法完成(例如,消息永远不会送达),会发生什么情况?对方可能因为某种原因不回应。以某种方式构建,至少可以检测并发出警报。
我在两个位置有两个不同的服务器。我需要使用异步数据交换。
- 服务器A是我们的数据服务器,我们在这里存储客户信息。
- 服务器B是我们的加工服务器,我们加工生产。
服务器 B 上的每个生产操作都有一个生产组。我需要做的是:
- A 发消息给B 有一个问题:今天在这个组(GUID)中计划进行什么操作。
- B 必须回答 XML 今天安排的操作列表。
- A 必须回答一个 XML 要取消的操作列表
- B 必须取消操作并结束对话
我的问题是:解决这个问题的正确方法是什么?我可以使用一份合同在一个对话中完成吗?我应该吗?
有了这样的合同:
CREATE CONTRACT [GetScheduledContract]
AUTHORIZATION [xxx]
(GetScheduledOutCalls SENT BY INITIATOR,
ReturnScheduledOutCalls SENT BY TARGET,
DeleteScheduledOutCalls SENT BY INITIATOR)
或者我应该将任务分离到不同的合同和对话中吗?
作为 MVP,你所拥有的东西对我来说似乎很好(即,如果一切顺利,它就会起作用)。几件事:
- 考虑在结束对话之前再添加一个来自目标 "operation completed successfully" 的回复。收到后,发起人也可以关闭他们的结尾。
- 如果这些操作中的任何一个明确无法完成(例如,在您的第 4 步中,请求是删除不存在的内容或删除导致外键违规的内容),会发生什么情况?我会添加某种错误消息类型 (
sent by any
),允许任何一方告诉另一方 "hey… something went wrong". - 如果这些操作中的任何一个隐含地无法完成(例如,消息永远不会送达),会发生什么情况?对方可能因为某种原因不回应。以某种方式构建,至少可以检测并发出警报。