WSO2 ESB聚合介体发送的邮件数量超过发送的数量

时间:2019-02-27 08:08:27

标签: wso2 wso2esb

我构建了一个API,该API使用克隆介体将消息发送到多个端点。我还使用了聚合介体来收集端点返回到一条消息的消息,并将其发送回客户端。 以下是具有聚合介体的结果:

        <outSequence>
        <aggregate id="GetOpenTasksReq">
            <completeCondition>
                <messageCount max="-1" min="-1"/>
            </completeCondition>
            <onComplete expression="//jsonObject" xmlns:m0="http://ws.wso2.org/dataservice">
                <log level="custom" separator=",">
                    <property name="MessageFlow" value="======================= Sending Back the Aggregated Responses. ==============="/>
                </log>
                <log level="full" separator=","/>
                <enrich>
                    <source clone="true" xpath="//tasks"/>
                    <target action="child" type="body"/>
                </enrich>
                <property name="messageType" value="application/json" scope="axis2"/>
                <send/> 
            </onComplete>
        </aggregate>
        <send/> 
    </outSequence>

应该返回

    {
  "tasks": [
    {
      "id": 10,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=10"
    },
    {
      "id": 1,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=1"
    },
    {
      "id": 33,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=33"
    }
  ]
}

但是我得到了:

    {
  "tasks": [
    {
      "id": 10,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=10"
    },
    {
      "id": 10,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=10"
    },
    {
      "id": 1,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=1"
    },
    {
      "id": 33,
      "desc": "New Assignment Item",
      "due": "2019-02-18T06:23:41+07:00",
      "link": "https://[host]:[port]/viewtask?id=33"
    }
  ]
}

由于某些原因,来自端点之一的响应之一被重复。我尝试将请求重新触发到ESB上的API,但它总是会重复其中一种响应。您能通过查看我的聚合介体配置并查看是否有任何错误来帮助我吗?和往常一样,谢谢。

1 个答案:

答案 0 :(得分:0)

似乎您的Enrich中介正在解决问题。为了清楚起见,我尝试解释一个示例,它不是Aggregator的工作原理,但是它可以弄清楚问题的原因。通过接收第一个响应,它将//tasks丰富到body。通过收到第二个响应,它再次执行相同的操作,就像您可能会猜到的那样,body//tasks下已经有内容,因此第二次它聚合了两个//tasks。 / p>

最好使用其他属性而不是丰富身体。