在我的场景中,没有后端调用。我需要通过循环遍历每条记录并向用户发送包含更新记录详细信息的单个聚合电子邮件通知来更新数据库中记录的一些详细信息。此外,如果更新过程中出现任何失败,电子邮件通知应包含更新成功的记录和失败的记录。
我尝试使用迭代和聚合调解器的组合来实现这一目标。但是,由于我的进程不包含任何发送或调用调解器,因此迭代循环不会终止。
我还尝试使用 ForEach 和 Enrich 中介器。我使用 ForEach 中介器循环访问记录,并使用 Enrich 中介器将每个记录的电子邮件负载附加到正文。虽然这在成功场景中工作得很好,但在失败场景中,我无法在 OnError 中检索聚合的有效负载,因为一旦我们仅退出 ForEach 循环,它就会自动聚合分割的段。
另外,我尝试使用此堆栈溢出问题中提到的方式:WSO2 ESB,使用聚合中介器而不在迭代中介器中发送/调用,但这对我来说也不起作用。
您可以通过将聚合中介器隔离到单独的序列并在迭代中介器和 onError 序列内调用它来实现此要求。请参考以下序列并相应地更新您的逻辑。
<sequence name="iterateSeq" onError="errorSeq" xmlns="http://ws.apache.org/ns/synapse">
<iterate expression="somthing" id="iterator" sequential="true">
<target>
<sequence>
<!-- Integration logic to be executed on each item -->
<sequence key="aggregateSeq"/>
</sequence>
</target>
</iterate>
<drop/>
</sequence>
<sequence name="aggregateSeq" xmlns="http://ws.apache.org/ns/synapse">
<aggregate id="iterator">
<completeCondition>
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete expression="something">
<!-- On completion logic here -->
</onComplete>
</aggregate>
<drop/>
</sequence>
<sequence name="errorSeq" xmlns="http://ws.apache.org/ns/synapse">
<!-- Error handling logic here -->
<!-- Call the aggregateSeq to aggregate the error -->
<sequence key="aggregateSeq">
</sequence>