【问题标题】:wso2 esb: Construct one message from multiple web service callswso2 esb:从多个 Web 服务调用构造一条消息
【发布时间】:2016-06-11 18:45:30
【问题描述】:

我有许多 Web 服务,每个服务都返回一个用户 ID 列表,如下所示:

<application name="abc">
   <users>
     <id>123</id>
     <id>456</id>
     <id>789</id>
   </users>
</application>

我需要能够

  1. 调用具有特定id(例如123)的代理服务;
  2. 调用各个webservice并搜索ID;
  3. 为每个 Web 服务创建响应,最后
  4. 将所有响应汇总到一条消息中,然后发送给客户端,如下所示:

<response>
  <id>123</id>
  <application name="abc">
      found
  </application>
  <application name="lmn">
      not found
  </application>
  <application name="xyz">
      found
  </application>
</response>

它可能是服务链和聚合的混合,但我不知道该怎么做。我尝试克隆一个请求并在最后使用 send 和一个接收序列,该序列使用有效负载工厂转换正文。然后在 Out 序列中,我使用聚合来组合新消息。但是它会超时,我认为这不是时间问题。我的主要问题是如何从聚合中介可以组合它们的每个 Web 服务响应中创建新消息。

感谢任何帮助。

谢谢

【问题讨论】:

    标签: web-services wso2 aggregate esb


    【解决方案1】:

    你需要遵循这个模式,https://docs.wso2.com/display/IntegrationPatterns/Scatter-Gather,你就快到了。当您定义接收序列时,响应将被转发到该序列,并且您不会在 outSequence 中获得响应消息。在 outSequence 中使用聚合器调解器并组合响应而不是定义接收序列。

    聚合响应后,您可以使用 xslt 调解器来转换消息。

    【讨论】:

    • 事情是我想在聚合之前过滤每个 Web 服务响应。使用 XSLT 过滤和重新格式化消息似乎效率低下。
    【解决方案2】:

    我设法通过为每个网络服务创建代理服务来解决我的问题。每个代理服务调用实际的 Web 服务并在输出序列中使用过滤器来创建如下响应:

    <application name="abc">
          found
      </application>
    

    然后我创建了一个将 idno 作为 URI 模板的 REST API。然后我用这个 idno 准备一个有效负载,并将请求克隆到我上面提到的代理服务。然后我汇总响应并将 idno 添加到有效负载中。

    如果有人有任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多