繁体   English   中英

通过Mule ESB中的VM端点时,会话变量被清除(使用AMQP)

[英]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时会被删除,但是能够看到传递标签。

观察:

  1. 如果我们使用flow-ref而不是VM 它工作正常。 但就我而言,我只需要使用VM。
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM