简体   繁体   English

Biztalk异常-自愈Orchestartion

[英]Biztalk exception- self healing orchestartion

We have main orchestration that has multiple sub orchestration. 我们的主要业务流程具有多个子业务流程。 All root orchestration is of transaction type:none, hence all the sub are also of same nature. 所有根业务流程都是事务类型:无,因此所有子事务也具有相同的性质。 Now any exception is caught in a parent scope of main orchestration and we have some steps like logging. 现在,任何异常都被捕获在主要业务流程的父范围中,并且我们有一些类似日志记录的步骤。 The orchestration is activated with a message from App SQL. 编排通过来自App SQL的消息激活。 So every time an exception occurs, say due to something intermittent, like unable to connect to web service. 因此,每次发生异常时,例如由于某些间歇性事件(例如无法连接到Web服务)。 We later go manually re-trigger. 稍后我们手动进行重新触发。

I'm looking at modifying the orch to be self healing, say from exception catch block it reinitialize the messages based on conditions that tell, the issue was intermittent. 我正在查看将Orch修改为自我修复的功能,例如从异常捕获块中,它根据表明问题是间歇性的情况重新初始化消息。 Something like app issue-null reference, we would not want to resend message, because, the orch is never going to work. 像应用程序问题为空的引用之类的东西,我们不希望重新发送消息,因为该流程永远无法正常工作。

There is a concept called compensation, but that is for transaction based orch- do n steps if any 1 fails, do m other steps(which would do alternate action or cleanup). 有一个称为补偿的概念,但是对于基于事务的编排,如果其中任何一个失败,则执行n个步骤,然后执行其他步骤(这将执行替代操作或清除)。

The only idea I have is do a look-up based on keywords in exception and decide to resend messages. 我唯一的想法是在例外情况下根据关键字进行查找,然后决定重新发送消息。 But I want some1 to challenge this or suggest a better approach 但我希望有人挑战这一点或提出更好的方法

I have always thought that it's better to handle failures offline. 我一直认为最好脱机处理故障。 So if the orchestration fails, terminate it. 因此,如果编排失败,请终止该编排。 But before you terminate, send a message out. 但是在终止之前,请发送一条消息。 This message will contain all the information necessary to recover the message processing if it turns out that there was a temporary problem which caused the failure. 如果发现有暂时的问题导致失败,则此消息将包含恢复消息处理所需的所有信息。 The message can be consumed by a "caretaker" process which is responsible for recovery. 该消息可以由负责恢复的“管理员”进程使用。

This is similar to how the Erlang OTP framework approaches high availability. 这类似于Erlang OTP框架实现高可用性的方式。 Processes fail quickly and caretaker processes make sure recovery happens. 流程快速失败,看守流程确保恢复发生。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM