[英]Session variable are wiped out when passing through VM endpoint in Mule ESB ( Uses AMQP)
我正在使用非常简单的流程,从第一个流程开始,我从AMQP(Ack模式: Manual
)接收消息并通过VM将其传递给第二个流程,在第二个流程中,我使用AMQP确认处理器来确认每条消息。
当我们使用VM时,两个传递标记和通道标记都被清除(这对于AMQP确认消息处理器是强制性的,如本URL AMQP确认mule中所述 )。 所以我试图在session变量中保存deliver-tag和amqp.channel。
我第一次想知道,存储在会话变量中的Channel值在通过VM时会被删除,但是能够看到传递标签。
观察:
flow-ref
而不是VM
。 它工作正常。 但就我而言,我只需要使用VM。 amqp.delivery-tag type
(java.lang.long)amqp.channel type
(com.rabbitmq.client.impl.ChannelN)。
如果'type'的amqp.channel导致问题。 如果是这样,我怎么能在会话变量中保存它。 请建议。 请找我的配置xml。
<flow name="testrabbitmqFlow1" doc:name="testrabbitmqFlow1" > <amqp:inbound-endpoint queueName="amqp.test.queue" exchangeDurable="true" queueDurable="true" responseTimeout="1000000" connector-ref="AMQP_Test" doc:name="AMQP"> <amqp:transaction recoverStrategy="REQUEUE" action="ALWAYS_BEGIN"/> </amqp:inbound-endpoint> <byte-array-to-string-transformer doc:name="Byte Array to String"/> <set-session-variable variableName="storedeliveryTag" value="#[flowVars['amqp.delivery-tag']]" doc:name="Session Variable"/> <set-session-variable variableName="storeChannel" value="#[flowVars['amqp.channel']]" doc:name="Session Variable"/> <vm:outbound-endpoint exchange-pattern="one-way" path="/test" doc:name="VM"> <vm:transaction action="NONE"/> </vm:outbound-endpoint>
有谁知道如何解决这个问题。
这永远不会奏效
<vm:outbound-endpoint exchange-pattern="one-way" ...
首先,因为假定模式是单向的,原始线程将结束,并且消息将被放入不同线程池的seda队列中。
然后因为,当你在VM,Http等传输上放置一条消息时,流变量会丢失,而对象实例,即使你试图将它们序列化并发送到另一台主机,它也没有意义。主机,即:打开一个文件,尝试以某种方式序列化描述符并将其发送到另一个主机,这是没有意义的。
我的推荐是使用flow-ref
而不是vm。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.