在Biztalk中使用Throw shape推迟消息是一种好习惯吗?

时间:2013-09-26 17:26:40

标签: biztalk

在业务流程中的某些时候,需要在一段时间后重新发送交易。 是否可以使用投掷形状使交易失败,因此将在港口重审后重试一段时间 或者最好使用循环/等待形状?

  

您还没有真正澄清消息需要的原因(用例)   不满意。

如果Web服务返回“成功失败”错误,客户端会要求我们将事务重新发送到Web服务。

2 个答案:

答案 0 :(得分:3)

您还没有真正澄清为什么(用例)需要重新发送消息,但在任何情况下我都不会使用Throw来控制通过业务流程的流程。

在错误情景中

如果由于传输失败而需要重新发送消息,则第一站是configure the send port to do retries,并且具有合适的延迟间隔(并注意备份传输选项)。通常没有必要使用编排循环进行手动重试。 - 此处的例外情况包括下游服务接受消息并发出自定义可重试“NACK”状态的时间 - 例如错误指示死锁或超时 - 然后需要检查,然后可能需要延迟+循环方案。

发送给多个消费者

如果您需要将相同的消息发送到另一个目的地(延迟之后)作为业务流程正常流程的一部分,那么我建议在流量发散点使用parallel actions shape,然后在发送到第二个目的地之前,在第二条腿上使用延迟形状。如果邮件可以同时发送到多个目的地,我会考虑使用Send Port Groups来执行此操作。

消息生成器/触发器/调度程序

如果业务流程的目的是以定义的时间间隔发布多个消息(例如触发消息),那么发布,延迟和循环(例如减少计数器)业务流程将正常工作。

答案 1 :(得分:2)

本博客文章中有一个处理Web服务异常的好方案大纲: http://blog.codit.eu/post/2012/01/13/Best-Practices-for-consuming-Web-Services-from-within-BizTalk-Server.aspx

要实现重试,您可以将发送端口配置为自动重试,或者在错误处理程序中放置一个延迟的循环形状。