使用 SOA BPEL 故障策略并结合 BPEL catchAll 进行绑定

问题描述 投票:0回答:1

我有一个场景,我正在呼叫第三方休息服务。我希望每当调用其余服务 BPEL 时出现

remote fault
时,BPEL 都应尝试 2 次重试,间隔 30 秒。如果重试失败,控制权应该转到 BPEL 的
catchAll
块,我将在其中处理故障、发送电子邮件通知等。 现在的问题是,如果我使用错误策略和绑定来配置重试,控件不会返回到 BPEL 中的 catchAll。我尝试将
default failure action
设置为
rethrow fault
中的
retry properties
但它忽略了 catchAll 块。如果我不使用故障策略,那么在失败时,控件将转到 catchAll,但它不会尝试重试以防远程故障。 [retry properties1

这是我的故障策略 abd 绑定文件。 故障政策:

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicies 
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    xmlns:bpel1="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
    xmlns:bpel2="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:medns="http://schemas.oracle.com/mediator/faults"
    xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages">

    <faultPolicy id="policy1">
        <Conditions>
            <faultName name="bpelx:remoteFault" xmlns:bpelx="http://schemas.oracle.com/bpel/extension">
                <condition>
                    <action ref="default-retry"/>
                </condition>
            </faultName>
            <faultName name="bpelx:bindingFault" xmlns:bpelx="http://schemas.oracle.com/bpel/extension">
                <condition>
                    <action ref="default-retry"/>
                </condition>
            </faultName>
        </Conditions>
        <Alerts/>
        <Actions>
            <Action id="default-termination">
                <abort/>
            </Action>
            <Action id="default-human">
                <humanIntervention/>
            </Action>
            <Action id="default-java">
                <javaAction className="oracle.integration.platform.faultpolicy.IFaultRecoveryJavaClass" defaultAction="default-termination"/>
            </Action>
            <Action id="default-replay">
                <replayScope/>
            </Action>
            <Action id="default-rethrow">
                <rethrowFault/>
            </Action>
            <Action id="default-ws">
                <invokeWS  uri="WebServiceURI"/><!-- format - <Absolute wsdl path>|service name|port name -->
            </Action>
            <Action id="default-enqueue">
                <enqueue uri="QueueURI"/> <!-- QueueURI format  - jdbc:oracle:thin:@<host>:<port>:<sid>#<un>/<pw>#queue -->
            </Action>
            <Action id="default-file">
                <fileAction>
                    <location>FOLDER_LOCATION</location>
                    <fileName>FILE_NAME</fileName><!-- FILE_NAME will support %ID%(rejected message instance id) or %TIMESTAMP% wildcards -->
                </fileAction>
            </Action>
            <Action id="default-retry">
                <retry>
                    <retryCount>2</retryCount>
                    <retryInterval>30</retryInterval>
                    <retryFailureAction ref="default-rethrow"/>
                    <exponentialBackoff/>
                </retry>
            </Action>
        </Actions>
        <Properties/>
    </faultPolicy>
</faultPolicies>

故障绑定:

<?xml version="1.0" encoding="UTF-8"?>
<faultPolicyBindings version="2.0.1" xmlns="http://schemas.oracle.com/bpel/faultpolicy">

    <reference faultPolicy="policy1">
        <name>SOAPReference</name>
    </reference>
</faultPolicyBindings>

SOA 是否不允许使用故障策略和绑定以及 catchAll?

oracle soa bpel fault
1个回答
0
投票

默认情况下,Rest Adapter 不支持像其他数据库或文件适配器那样的重试,理想情况下,无论您提到什么,如果您使用故障策略和故障绑定,重试都应该起作用,并且最后它也会进入 catch all 块。 您可以在这里分享故障策略和故障绑定片段以供参考吗?

你的错误绑定应该是这样的

 <reference faultPolicy="FaultPolicy">
        <name>your adapter name</name>
    </reference>

故障策略应该是这样的

    <?xml version="1.0" encoding="UTF-8"?>

<faultPolicies 
    xmlns="http://schemas.oracle.com/bpel/faultpolicy"
    xmlns:bpelx="http://schemas.oracle.com/bpel/extension"
    xmlns:bpel1="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
    xmlns:bpel2="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
    xmlns:medns="http://schemas.oracle.com/mediator/faults"
    xmlns:rjm="http://schemas.oracle.com/sca/rejectedmessages">

    <faultPolicy id="FaultPolicy">
        <Conditions>
            <faultName>
                <condition>
                    <action ref="default-retry"/>
                </condition>
            </faultName>
        </Conditions>
        <Alerts/>
        <Actions>
            <Action id="default-termination">
                <abort/>
            </Action>
            <Action id="default-retry">
                <retry>
                    <retryCount>3</retryCount>
                    <retryInterval>2</retryInterval>
                </retry>
            </Action>
        </Actions>
        <Properties/>
    </faultPolicy>
</faultPolicies>
© www.soinside.com 2019 - 2024. All rights reserved.