【问题标题】:Mule Request Reply: Send Reply After All the Flow ProcessedMule 请求回复:处理完所有流程后发送回复
【发布时间】:2014-07-11 04:23:18
【问题描述】:

目前我正在使用 mule。我有 3 个流:RequestFlowServiceResponseSendResponse

在第一个流程中,我处理了请求(转换请求参数,将其写入 wmq 等)。仅供参考,此流程上的 wmq 只能用于写入。

在第二个流程中,我通过另一个 wmq 从服务器读取响应,将其转换为 json,然后发送到 VM。仅供参考,此流程上的 wmq 只能用于读取。

在第三个流程中,我尝试将响应发送回第一个流程并生成一个文件。

为了将流 3 的响应发送回流 1,我尝试使用 request-reply

但是,不幸的是,当我尝试发送请求时,我发现:

  1. 第一个流程到达request-reply组件后,直接进入第三个流程。
  2. 然后,mule 处理完第三个流程上的所有操作后,会将响应发送回请求-回复组件。
  3. 做一些日志记录(第一个流上的记录器组件)
  4. 然后,进入流程,处理所有操作
  5. 再次处理第三个流程

这就是为什么在所有过程完成后,我的应用程序将:

  1. 生成 2 个文件(1 个包含请求 xml,1 个包含 json 响应)
  2. 将请求xml返回到http

但是,这不是我想要的。我需要的流程是:

  1. Mule 处理第一个流上的操作,直到请求-回复组件
  2. 转到第二个流程并处理所有组件
  3. 完成第二个流程后,将进入第三个流程。继续所有组件
  4. 在第一个流程中将回复发送回请求-回复组件
  5. 做一些日志记录(第一个流程中的记录器组件)
  6. 然后完成

此应用程序的结果应该是:

  1. 1 文件包含 JSON 响应
  2. http 上的 JSON 响应

那么,该怎么做呢?提前致谢。

【问题讨论】:

    标签: request mule flow reply


    【解决方案1】:

    您没有显示消费由request-reply 中的VM 出站端点发送到sender 路径的消息的流:我假设它是一个负责将消息发送到服务器的流。

    似乎您错过的只是SendResponse 中的 VM 出站端点,它将消息发送到 response 路径,VM 入站在 request-reply 中等待。

    PS。当然,假设服务器将 JMS 相关 ID 从请求消息传播到响应消息,否则 Mule(也不是任何客户端)可能会重新连接对请求的响应和 @ 987654326@ 会失败。

    PPS。在request-reply 中的单个VM 出站端点周围不需要all 路由器。

    【讨论】:

    • 我应该将哪个 vm outbound 放在 SendResponse 上? “发件人”虚拟机?我已经尝试添加它,但仍然没有工作
    • 不,应该是response,这是request-reply 中的VM inbound-endpoint 正在等待的。确保相关 ID 从头到尾传播!
    • 如何确定关联ID?
    • 您可以在 Studio 中进行单步调试或使用logger 元素来确保从request-replySendResponse 流调度到vm://response 之前携带相同的相关ID。如果它被丢弃在某个地方,您将需要使用copy-properties 消息处理器。在服务器端,这取决于那里的编码方式。
    • 然后,如果我想在 2 流中将消息 id 设置为 mule_correlation_id,我该怎么做呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 2014-03-09
    • 2014-06-21
    相关资源
    最近更新 更多