我正在使用Mulesoft设计一个api,我希望它在响应时间超过10秒时返回一个通用响应。目前我通过使用HTTP连接器调用api中的另一个流来完成此任务。
<http:request-config name="HTTP_Request_Configuration" host="localhost" port="8081" responseTimeout="10000" doc:name="HTTP Request Configuration"/>
<flow name="Incomming-Flow">
<!-- get request -->
<http:request config-ref="HTTP_Request_Configuration" path="/validationWithTimeout" method="POST" doc:name="HTTP"/>
<catch-exception-strategy doc:name="Catch Exception Strategy">
<!-- Set payload to generic response when http call times out -->
</catch-exception-strategy>
</flow>
<flow name="Processing-Flow">
<http:listener config-ref="HTTP_Request_Configuration" path="/validationWithTimeout" allowedMethods="POST" doc:name="HTTP"/>
<!--
processing components go here
-->
</flow>
是否有更好的方法来停止流程并在花费太长时间后返回通用响应?
答案 0 :(得分:1)
检查完上面的配置后,唯一缺少的是超时变量及其使用情况,请为响应定义超时10秒,超时时需要抛出异常。
答案 1 :(得分:0)
一种方法 - 在异常处理中捕获并设置所需的状态,在set payload set中设置所需的一般响应。示例如下所示或者您也可以使用Mapping-exception Strategy基于状态代码进行捕获。
<flow name="Incomming-Flow">
<!-- get request -->
<http:request config-ref="HTTP_Request_Configuration" path="/validationWithTimeout" method="POST" doc:name="HTTP"/>
<catch-exception-strategy doc:name="Catch Exception Strategy" when="java.net.ConnectException">
<set-property propertyName="http.status" value="#[403]" doc:name="Property"/>
<set-payload value="{"success":false,"errors":[{"code":"50001","message":"Internal Server Error","details":"An internal system error has occurred, please contact the support team."}]}" doc:name="Set Payload" mimeType="application/json"/>
</catch-exception-strategy>
</flow>
答案 2 :(得分:0)
您可以在全局设置配置中配置defaultResponseTimeout。将以下内容放在<mule>
元素中。
<configuration defaultResponseTimeout="10000"></configuration>
但请注意,这将适用于所有流程。然后,您可以在异常处理程序中配置异常。
答案 3 :(得分:0)
您可以尝试使用轮询每秒检查一次并设置一个变量,一旦计数达到10,即10秒,您就可以打印错误消息或指向所需的异常流程。
答案 4 :(得分:0)
如果这是特定于API /流,则适合处理异常策略并构建Dataweave以映射通用响应。
答案 5 :(得分:0)
首先在 poll 连接器中配置 Http ,然后根据您的要求将轮询频率设置为1秒,然后在 foreach中的计数器变量中使用每个轮询频率它将每秒更新一次,在 setpayload 中检查计数器是否等于10,如果它等于10发送您所需的响应。
答案 6 :(得分:0)
在Http连接器中将超时设置为10秒。 在异常策略中,请使用要为API返回的通用有效负载配置超时异常流。
答案 7 :(得分:0)
试试这个 -
一个。全球范围内的特定应用
在应用程序中添加全局元素配置并设置属性defaultResponseTimeout:
<configuration defaultResponseTimeout="10000" />
湾专门针对流程
将附加的TimeoutMessageProcessor添加到您的应用程序并将其放在出站端点之前:
<custom-processor class="com.mule.support.TimeoutMessageProcessor">
<spring:property name="timeout" value="10000" />
</custom-processor>
答案 8 :(得分:0)
除了通过骡子流连接外,请检查您是否可以通过其他方式访问其余服务。你真的有运行的服务,它采用低于url格式并公开为GET服务: http://1.1.1.1:80/TEST_OUTBOUND
答案 9 :(得分:0)
在Http连接器中将超时设置为10秒。在异常策略中,请使用要返回API的通用有效负载配置超时异常流。
答案 10 :(得分:0)
我们的团队实施了弹簧引导连接器,并在那里进行了配置以解决此问题。此后没有问题。
答案 11 :(得分:-1)
根据您的配置,流程将尝试点击上面的网址。请在下面找到一个响应超时的HTTP请求配置示例(如果您只使用HTTP而不是HTTPS,则可以避免使用TLS部分):
<configuration defaultTransactionTimeout="300000" defaultResponseTimeout="300000" doc:name="Configuration">
<default-threading-profile poolExhaustedAction="RUN"/>
希望能帮到你。