通过 Http 端点调用文件入站端点 - 将 XML 设置为负载并在 IBM MQ 中更新

Call a File Inbound Endpoint via Http endpoint - Set XML as payload and update in IBM MQ

我正在设计一个应用程序流程,我必须在其中读取文件(XML 文件)并将数据放入 IBM MQ(队列)。我是否需要创建一个 HTTP 请求来触发文件读取和更新队列,否则我该如何执行此任务。

目前我正在创建一个 HTTP 请求并将其连接到 WMQ,但我正在将 NULL 数据放入队列中。基本上有效负载是 NULL。

这是我浏览Queue时读到的数据: sr.org.mule.transport.NullPayload1.L5U...xp

如果你想按需访问文件组件(无论何时访问HTTP,只有文件组件需要访问),使用Mule Requester代替做同样工作的文件组件。

<mulerequester:config name="Mule_Requester" doc:name="Mule Requester"/>
<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" basePath="test2" doc:name="HTTP Listener Configuration"/>
<flow name="httpFlow">
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"/>
    <mulerequester:request config-ref="Mule_Requester" resource="file://C:/in" doc:name="Mule Requester"/>
    <object-to-string-transformer doc:name="Object to String"/>
    <logger message="**payload:*#[payload]" level="INFO" doc:name="Use WMQ here instead of Logger"/>

</flow>

Link 参考:https://github.com/mulesoft/mule-module-requester/blob/master/mulerequesterdemo/src/main/app/MuleRequesterDemo.xml

除了 HTTP,您还可以根据需要使用 Poll 组件安排作业触发器。希望这有帮助。

您想将文件连接器用作入站端点,但实际上用作出站端点。检查文件连接器的配置 xml 文件。

有很多方法可以像文件连接器、轮询范围或 Quartz 连接器一样将文件读取为入站。您可以根据需要使用其中任何一个。最简单的流程是

<flow name="testfixedFlow">
    <file:inbound-endpoint path="tmp" connector-ref="File" responseTimeout="10000" doc:name="File"/>
    <wmq:outbound-endpoint queue="xyz" connector-ref="WMQ" doc:name="WMQ"/>
</flow>

但是如果你想在流程之间获取资源,你可以使用 Mule requester

希望对您有所帮助。

这样试试:

只要您在流程开始以外的任何其他地方使用文件连接器,它就会成为出站端点。

对于使用文件作为入站端点检索任何文件,您必须在某些流程的开头使用它并保持流程最初处于停止状态 为:

<flow name="filePickupFlow" initialState="stopped">
    <file:inbound-endpoint path="src/main/resources/input" responseTimeout="10000" doc:name="File"/>
    <wmq:outbound-endpoint queue="gh" doc:name="WMQ" connector-ref="WMQ"/>
</flow>

对于您的情况,只需将路径更改为所需的文件位置。

然后为了进一步通过 http 调用它,使用 http 端点 创建另一个流程并使用 表达式组件 启动包含文件的流程入站端点调用为:

<expression-component doc:name="Expression">
    app.registry.filePickupFlow.start();
</expression-component>

然后如果你想在它完成处理后停止它,你可以再次使用表达式组件作为:

<expression-component doc:name="Expression">
    Thread.sleep(5000);
    app.registry.filePickupFlow.stop();
</expression-component>

Thread.sleep() 在这里只是为了在流程开始和停止之间提供一些时间间隔,让流程操作完成。您可以添加一些其他的东西来保持这个时间间隔,或者根据您自己的使用情况设置时间。

我想这就是您要找的东西。

此致,

JJ