wso2 esb:从多个Web服务调用构造一条消息

时间:2014-07-15 09:50:07

标签: web-services wso2 aggregate esb

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

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

我需要能够

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

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

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

    感谢任何帮助。

    由于

2 个答案:

答案 0 :(得分:1)

你需要遵循这种模式,https://docs.wso2.com/display/IntegrationPatterns/Scatter-Gather,你几乎就在那里。当您定义接收序列时,响应将被转发到该序列,您将无法在outSequence中获得响应消息。在outSequence中使用聚合器介体并组合响应,而不是定义接收序列。

汇总回复后,您可以使用xslt介体转换消息。

答案 1 :(得分:0)

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

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

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

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