Mulesoft流量超时

时间:2016-11-14 19:19:24

标签: xml mule

我正在使用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>

是否有更好的方法来停止流程并在花费太长时间后返回通用响应?

12 个答案:

答案 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="{&quot;success&quot;:false,&quot;errors&quot;:[{&quot;code&quot;:&quot;50001&quot;,&quot;message&quot;:&quot;Internal Server Error&quot;,&quot;details&quot;:&quot;An internal system error has occurred, please contact the support team.&quot;}]}" doc:name="Set Payload" mimeType="application/json"/>
  </catch-exception-strategy>
</flow>

答案 2 :(得分:0)

您可以在全局设置配置中配置defaultResponseTimeout。将以下内容放在<mule>元素中。 <configuration defaultResponseTimeout="10000"></configuration> 但请注意,这将适用于所有流程。然后,您可以在异常处理程序中配置异常。

Global Configuration Settings

Global Configuration Attributes

答案 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"/>

希望能帮到你。