服务代理消息流

时间:2018-08-31 10:39:36

标签: sql-server tsql sql-server-2012 service-broker

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

  • 服务器A是我们的数据服务器,我们在这里存储客户信息。
  • 服务器B是我们的处理服务器,我们处理生产。

服务器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)

还是应该将任务分为不同的合同和对话框?

1 个答案:

答案 0 :(得分:1)

作为MVP,您所拥有的东西对我来说似乎很好(也就是说,如果一切顺利,那将会奏效)。两件事:

  1. 在结束对话之前,请考虑从目标中再添加一个答复,指出“操作已成功完成”。收到后,发起者也可以关闭其末端。
  2. 如果其中任何一项操作明显无法完成(例如,在您的第4步中,请求是删除不存在的内容或该删除导致外键冲突),会发生什么情况?我要添加某种错误消息类型(sent by any),该类型允许任一方告诉另一方“嘿……出了点问题”。
  3. 如果其中任何一项操作隐式无法完成(例如,消息永不发送),会发生什么情况?另一端可能由于某种原因没有响应。以某种方式进行构建,至少可以检测到并对此发出警报。
相关问题