动态接收输入文件并让我的 mule 应用程序处于监听状态

receiving an input file dynamically and put my mule application in listening

场景: - 应用程序想要向设备列表发送推送。 - 所以她将信息发送到我的 mule 应用程序,它必须监听到达的信息。 - 我的应用程序将通过 Web 服务将此信息发送到将发送推送的应用程序,然后我的应用程序将等待响应,该响应是一个 json 文件,内容为:成功:0/1 失败:0/1, - 根据这个答案,如果相关设备没有收到推送,我的 mule 应用程序将发送我从数据库中获取的电子邮件。

我已经完成了这个场景的最后一部分。从收到推送的答案。现在我对第一部分有一些疑问:

  1. 我猜应用程序发送了一个 json 文件,其中包含每个设备的信息列表。 如何处理信息设备列表。我必须循环 json 文件的内容。这有什么例子吗?
  2. 如何让我的应用程序监听到达请求以发送推送? http 连接器是否足够?如果是如何配置路径变量。

我正在使用 mule 3.5.0 CE,在此先感谢您。

让我们将其分解为各个组件:

  1. Sender Application - 这是需要与设备通信的服务。

  2. 设备控制器 - 这是与硬件设备对话的应用程序。

  3. Proxy - 这就是您在 Mule ESB 上开发的内容。它将连接到 Sender ApplicationDevice Controller 并将请求从 Sender 传输到 Controller;然后将结果从 Controller 发送回 Sender。

流程看起来像这样:

  1. 发件人应用程序需要与设备通信。
  2. 发件人应用程序使用JSON传输信息。
  3. 代理收到此 JSON 请求。
  4. 代理然后通过 HTTP 联系设备控制器。
  5. 设备控制器仅与代理对话,returns结果为 0 或 1,具体取决于物理设备的结果。
  6. 代理随后需要将此结果传达给发送方应用程序。

起初,您可能会考虑通过 HTTP 开发代理(使用 HTTP Connector)。此连接器创建一个可以侦听和响应请求的 Web 服务端点(基本上是一个网站)。

  1. 发件人应用程序通过 HTTP 连接到此端点并提交包含要执行的命令的 JSON 文档。

  2. 然后您的代理立即联系设备控制器(同样,使用相同的连接器通过 HTTP)。

  3. 设备控制器与设备对话,然后returns响应您的代理(通过 HTTP)。

  4. 您获取此响应,然后将其作为对原始 HTTP 请求(来自发件人应用程序)的响应发回。

这里的问题是,如果您的连接与设备控制器(或设备控制器与物理设备)之间存在任何延迟,连接将在两侧保持阻塞状态(因为您需要发送响应)。

如果延迟很大,您的代理和发件人应用程序之间的 HTTP 连接可能会终止。

当某些站点过载并且没有响应时也是如此 - 浏览器最终会超时。

为避免这种情况,请将您的集成分成三个独立的流程。

  1. 第一个流程将创建一个正常的 HTTP 连接,发件人应用程序将向其上传 JSON 文档。它将获取 JSON 文档并使用 batch module 将每个条目转换为消息(注意:这仅适用于企业版 - 对于 CE 版本,您必须自己编写此逻辑) .接下来,获取此消息并将它们放入单独的队列中。 Return 此消息的唯一 ID,作为对发件人应用程序的 JSON 响应。

  2. 您的第二个流正在侦听此队列,每当消息到达时,它都会连接到设备控制器并获得响应。然后将响应写入另一个队列。

  3. 您的第三个也是最后一个流侦听此结果队列,获取此队列中的每条消息并将其转换为 JSON/XML。然后它有一个 HTTP 连接器,可以在其中查询每个命令的结果。

在上面的设置中,您的发送方应用程序可以放置一个大的 JSON 文件来执行命令;对于每个命令,一个唯一的 ID 将返回给发送方应用程序。

然后它将查询结果端点(您的最后一个流公开的内容)并将消息 ID 发送给它。结果端点随后将检查此请求的状态并使用适当的代码进行响应。

这是一个如何工作的示例(从发件人应用程序的角度来看):

I 是您流程的输入,O 是发送的结果。

第 1 步 - 发送要执行的命令的请求:

I: Sender Application > http://localhost:8080/input-commands?device=1&command=Y
O: <command><req-status>OK</req-status><id>1234-123</id></command>

第 2 步 - 查询结果:

I: Sender Application > http://localhost:8080/result?id=1234-123
O: <command><id>1234-123</id><result>0</result></command>