我无法理解我是否在流量上下文中使用了正确的变量。
我有一个通过HTTP端点公开的流,在此流程中我存储有关传入请求的数据,然后继续使用包含流量/子流数据的流变量。
我的问题是,如果我同时有2个请求进入,它们是否会在流链中稍后覆盖流量变量导致问题?
我想避免请求1设置流变量,然后处理数据并继续引用已被请求2中的数据覆盖的流变量。
这是怎么回事?流入的每个流程是否彼此独立?
答案 0 :(得分:1)
如果我有2个请求同时进来,他们基本上会是 在流程链中稍后覆盖流量变量导致问题
否即可。变量存储在消息中。对于每个HTTP请求,都将创建一条新消息。
您可以使用以下应用程序轻松自行尝试:
<?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:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 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/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd
http://www.mulesoft.org/schema/mule/scripting http://www.mulesoft.org/schema/mule/scripting/current/mule-scripting.xsd">
<flow name="foo">
<http:listener config-ref="user-httpListenerConfig" path="/{test}" doc:name="HTTP"/>
<set-variable variableName="testVariable" value="#[message.inboundProperties['http.uri.params']['test']]" doc:name="testVariable"/>
<foreach collection="#[[1,2,3,4,5,6,7,8,9,0]]" doc:name="For Each">
<logger message="#[flowVars.testVariable]" level="INFO" doc:name="Logger"/>
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy">
<![CDATA[Thread.sleep(1000)
return payload]]></scripting:script>
</scripting:component>
</foreach>
</flow>
</mule>
只需在浏览器中通过一个标签调用http://localhost:8081/foo
,然后在另一个标签中调用http://localhost:8081/bar
即可。您会在日志中看到foo
和bar
交替显示。
答案 1 :(得分:0)
流变量是实例变量,每次为新请求创建它。因此,多个请求不能覆盖流变量,因为每个请求都有自己的实例变量。
答案 2 :(得分:0)
“我的问题是,如果我有2个请求同时进入,它们基本上会覆盖流量变量导致流量链中的问题吗?”
是的,每个新请求新流程实例都将正确创建,并且每个新请求都会初始化变量
每个请求彼此独立,除非您使用某种类型的存储(如Object Store)来保留请求所在的流量变量值。
使用像Object store这样的内存存储,你可以为每个新请求保留变量值,否则每个新请求都会在流中创建新的变量实例