如何在不丢失消息负载的情况下将睡眠设置为 Mulesoft 中的流

How to set sleep into the flow in Mulesoft without losing the message payload

我想插入脚本来延迟 Mulesoft 中的处理流程。我试图在 groovy 中插入脚本,但我丢失了消息有效负载,因此当我必须获取消息有效负载时收到空指针。 我怎样才能不丢失消息负载?

谢谢

您可以从 Java 组件、MEL 组件甚至 Groovy 组件调用 Thread.sleep。

但是,这通常是一个设计缺陷,除非您正在测试某些东西。如果这是用于生产(并且确实确实需要延迟),请考虑其他解决方案,例如使用 JMS 的延迟消息。

如果您在流程中使用 Groovy 组件,那么您可以按如下方式定义 sleep() :-

<scripting:component doc:name="Groovy">
  <scripting:script engine="Groovy"><![CDATA[
    sleep(10000);
    return message.payload;]]>
  </scripting:script>
</scripting:component>

记得returnmessage.payload在Groovy 这样你就可以在最后得到 payload 否则你会得到 null有效载荷

Groovy 如果最后不 return 则存在丢失有效载荷的问题,因此,在 Groovy 你需要在最后 return 有效负载,这就是你收到 null 有效负载

的原因

或者你可以使用 expression-component 如下:-

<expression-component>
    Thread.sleep(10000);
</expression-component>

您可以在此处使用 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");     

你可以利用Groovy组件来增加延迟。

sleep(20000)

您可以使用如下 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>

在 Mule 4 中,您应该使用运行时 "wait" 功能。任何其他选择都会阻止您的所有线程。 https://docs.mulesoft.com/mule-runtime/4.1/dw-runtime-functions-wait