如何使用故障调解器响应故障

Posted

技术标签:

【中文标题】如何使用故障调解器响应故障【英文标题】:How to use the Fault Mediator to Respond with a Fault 【发布时间】:2019-11-17 19:47:03 【问题描述】:

我正在尝试使用 WSO2 EI 故障调解器,但故障响应总是给我一个无效响应消息。这里的重点是尝试构建自定义故障消息。我的示例 API 代码:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/test" name="TestFaultAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET" uri-template="/teste">
        <inSequence>
            <log description="" level="full" separator=";">
                <property expression="get-property('uri.var.teste')" name="Path"/>
                <property expression="get-property('transport','Content-Type')" name="ContentType"/>
            </log>
            <filter xpath="get-property('uri.var.teste') != '1234'">
                <then>
                    <log description="" level="full">
                        <property name="Entrada" value="&quot;Fault Way&quot;"/>
                    </log>
                    <makefault description="" version="soap11">
                        <code value="soap11Env:Client" xmlns:soap11Env="http://schemas.xmlsoap.org/soap/envelope/"/>
                        <reason value="Recruso incorreto"/>
                        <detail>incorrect Resource</detail>
                    </makefault>
                    <respond/>
                </then>
                <else>
                    <log level="full">
                        <property name="Caminho" value="&quot;Corret Way&quot;"/>
                    </log>
                    <payloadFactory media-type="json">
                        <format>&#xd;
"Status":"Correct Resource"&#xd;
</format>
                        <args/>
                    </payloadFactory>
                    <respond/>
                </else>
            </filter>
        </inSequence>
        <outSequence/>
        <faultSequence>
            <log level="full" separator=";">
                <property name="Caminho" value="&quot;Entrou Fault Sequence&quot;"/>
            </log>
            <property description="" name="HTTP_SC" scope="axis2" type="INTEGER" value="400"/>
            <payloadFactory media-type="json">
                <format>&#xd;
"codigoErro":$1,&#xd;
"detalhe":$2&#xd;
</format>
                <args>
                    <arg evaluator="xml" expression="get-property('HTTP_SC','axis2')"/>
                    <arg evaluator="xml" expression="get-property('ERROR_DETAIL')"/>
                </args>
            </payloadFactory>
            <respond/>
        </faultSequence>
    </resource>
</api>

所以我有两个问题: 1 - 如何使自定义故障消息响应? 2 - 是否可以使用故障调解器将序列更改为“故障序列”?

【问题讨论】:

【参考方案1】:

我会把答案放在这里。这些是我的研究和经验的结果: 1 - 如何使自定义故障消息响应? 这样做的方法是使用过滤器中介来测试规则并构建消息以响应您的请求。

2 - 是否可以使用故障调解器将序列更改为“故障序列”? 不会。只有在发生故障时才会开始执行故障序列。您不能使用调解器自己更改执行路径。

因此,有可能比我更有经验的其他人回答不同的信息。 [],s 马塞洛

【讨论】:

以上是关于如何使用故障调解器响应故障的主要内容,如果未能解决你的问题,请参考以下文章

诊断和响应故障_使用数据恢复顾问(Data Recovery Advisor)诊断和修复故障

如何使用Cassandra复制因子1管理节点故障?

Web App:高可用性/如何防止单点故障?

如果出现故障,如何自动重新建立双工通道?

如何解决vSphere存储访问故障

Java进程故障排查思路及步骤