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

Session variable are wiped out when passing through VM endpoint in Mule ESB ( Uses AMQP)

我使用的是非常简单的流程,从第一个流程开始,我从 AMQP(Ack 模式:Manual)获取消息,然后通过 VM 将其传递给第二个流程,在第二个流程中,我' m 使用 AMQP 确认处理器确认每条消息。

当我们使用 VM 时,传送标签和通道标签都被清除(这对 AMQP 确认消息处理器是强制性的,如本 url AMQP acknowledgement mule 中所述)。所以我试图将交付标签和 amqp.channel 保存在会话变量中。

第一次疑惑,存储在session变量中的Channel值在通过VM时被抹掉了,但是可以看到delivery tag

观察:

  1. 而不是 VM 如果我们使用 flow-ref。它工作正常。但就我而言,我只需要使用 VM。
  2. amqp.delivery-标签type (java.lang.long) amqp.channel type (com.rabbitmq.client.impl.ChannelN).

    如果 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 而不是虚拟机。