我想插入脚本来延迟Mulesoft中的处理流程。我试图在groovy中插入脚本,但我丢失了messagge有效负载,所以当我必须得到消息有效负载recived null指针。 我怎么能不丢失消息有效载荷?
由于
答案 0 :(得分:18)
如果您在流程中使用 Groovy 组件,则可以按如下方式定义sleep(): -
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[
sleep(10000);
return message.payload;]]>
</scripting:script>
</scripting:component>
在 Groovy 中记住 返回 message.payload,以便获得有效负载最后,否则您将获得 null 有效负载
Groovy 如果您不在最后返回,则会出现丢失有效负载的问题,因此,在 Groovy 中,您需要在结束时返回有效负载,并且这就是您收到 null 有效负载
的原因或者,您可以使用表达式 - 组件,如下所示: -
<expression-component>
Thread.sleep(10000);
</expression-component>
答案 1 :(得分:3)
您可以从Java组件,MEL组件甚至Groovy组件调用Thread.sleep。
然而,除非您正在测试某些东西,否则这是一个设计缺陷。如果这是用于生产(并且实际上需要延迟),请考虑其他解决方案,例如使用JMS的延迟消息。
答案 2 :(得分:1)
在Mule 4中,您应该使用运行时“等待”功能。任何其他选择都会阻塞您的所有线程。 https://docs.mulesoft.com/mule-runtime/4.1/dw-runtime-functions-wait
答案 3 :(得分:-1)
你可以使用如下的groovy代码:
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns:http=http://www.mulesoft.org/schema/mule/http
xmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"
xmlns="http://www.mulesoft.org/schema/mule/core"
xmlns:doc=http://www.mulesoft.org/schema/mule/documentation
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core
http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http
http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/scripting
http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd">
<flow name="groovyFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/groovy" allowedMethods="POST" doc:name="HTTP"/>
<set-payload value="#[payload]" doc:name="Set Payload"/>
<scripting:transformer doc:name="Groovy">
<scripting:script engine="Groovy">
<![CDATA[sleep(10000);
System.out.println("Holding for 10 seconds");
return message.payload;]]></scripting:script>
</scripting:transformer>
</flow>
</mule>
答案 4 :(得分:-2)
你可以在这里使用groovy代码,如下所示。
def name = sessionVars.username;
def a = sessionVars.int1.toInteger()+1;
def b = sessionVars.int2.toInteger();
def c = a+b;
sessionVars.sum = c;
sessionVars.int1 = a;
if(name != null){
name = name
}
else{
name = '';
}
sleep(3000);
System.out.println("Holding the flow for 3000 ms");
答案 5 :(得分:-3)
您可以使用Groovy组件来添加延迟。
sleep(20000)