0

我想使用 JMS 队列来存储文件并稍后处理。我可以从队列中读取它;我得到一个字节数组,我可以将它写入一个文件夹。但是当我推送到队列时文件名丢失了,因为入站属性丢失了。

<file:endpoint path="C:\Store" name="storage" responseTimeout="10000" doc:name="File"/>
<file:file-to-byte-array-transformer doc:name="File to Byte Array"/>
<jms:outbound-endpoint doc:name="Storage Queue" connector-ref="Active_MQ" queue="file.queue"/>

如何再次关联原始文件名。在推入 Mule 之前,是否有任何转换器可以保留文件名?

4

2 回答 2

1

按以下方式尝试 jms:outbound-endpoint。

<jms:outbound-endpoint doc:name="Storage Queue" connector-ref="Active_MQ" queue="file.queue">
          <copy-properties propertyName="*"></copy-properties>
</jms:outbound-endpoint>

这有助于您在将有效负载发布到 JMS 队列时保留所有入站属性。

希望这可以帮助。

于 2014-08-21T15:30:44.727 回答
0

您需要类似以下内容才能从 Queue 中读取并写入具有原始文件名的文件......这里有一个简单的示例,其中从流中读取文件并发送到 JMS 队列,下一个流将文件从 JMS 队列中取出并使用原始文件名写入文件夹:-

  <?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:file="http://www.mulesoft.org/schema/mule/file"
    xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking"
    xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:http="http://www.mulesoft.org/schema/mule/http"
    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" version="EE-3.5.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd
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/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd">

    <jms:activemq-connector name="Active_MQ"
        brokerURL="tcp://localhost:61616" validateConnections="true" doc:name="Active MQ" />
    <flow name="JMSSender" doc:name="JMSSender">
        <file:inbound-endpoint responseTimeout="10000"
            doc:name="File" path="E:\backup\test">
            <file:filename-regex-filter pattern="sun.pdf,aa.txt" caseSensitive="false" />
        </file:inbound-endpoint>

        <file:file-to-byte-array-transformer /> <!-- This is necessary otherwise the output PDF file will be corrupted .. -->

        <set-session-variable variableName="FileName" value="#[message.inboundProperties.originalFilename]" doc:name="Session Variable" />

        <jms:outbound-endpoint queue="MyQueue"  connector-ref="Active_MQ" doc:name="JMS" exchange-pattern="request-response">
        </jms:outbound-endpoint>

    </flow>


    <flow name="JMSReceiver" doc:name="JMSReceiver">

        <jms:inbound-endpoint connector-ref="Active_MQ"
            doc:name="JMS" exchange-pattern="request-response" address="jms://tcp:MyQueue">
        </jms:inbound-endpoint>

        <file:outbound-endpoint path="E:\backup\test\ss" outputPattern="#[sessionVars['FileName']]" responseTimeout="10000"
            doc:name="File" />
    </flow>


</mule>

在这里,您可以使用会话变量接收原始文件名...

于 2014-08-21T16:23:19.327 回答