消息传递保证与安全传递

 

消息传递保证与状态一致性

对于表示状态流程的工作流而言,通常会使用分布式事务,以便通过工作流实例的更新状态完成消息的处理,从而保证刚好处理该消息一次。Workflow Manager 1.0 不依赖于 MSDTC 来保持工作流实例与其消息之间的状态一致性。该产品实施了一个依赖于 Service Bus 的最终一致性模型,可以在高度可伸缩环境中实现刚好处理入站消息一次。但是,这在处理工作流中的入站和出站消息时,会导致某些根本差异。

只要返回状态代码 200,就保证会将入站消息(通过通知终结点发送 - 参见上文)传递到工作流。只要消息指定了相同的 MessageId,就能以幂等方式重试消息,确保 HTTP 传输的可靠性不影响总体传递保证。从内部讲,一旦通知终结点收到消息,该消息就会持久存储在 Service Bus 中,直到被传递给工作流为止。

当工作流收到一条消息时,就会加载该工作流,然后开始或恢复该工作流的执行。在工作流执行的某个段,任何负面影响工作(例如,使用 HTTP 活动发送出站消息)都将被收集,并保持到成功保存工作流的更新状态为止。此时会从持久性存储中删除入站消息(现已被处理),并执行负面影响工作。将会发送出站消息,随后,如果由于网络问题或进程失败而导致发送失败,将会重试发送。最终结果是保证将出站消息至少发送一次,因此,可能需要将 Web 服务设计为以幂等方式处理消息。系统会将响应返回给工作流,以恢复工作流执行。