我在WSO2 Esb上工作了几个月,现在我需要使用迭代器中介器拆分传入的消息,将每个部分发送到一个endpoint,并使用聚合中介器收集答案。类似于这样:
<iterate expression="//element" id="ELEMENTS">
<target>
<sequence>
[send to endpoint using element data]
</sequence>
</target>
</iterate>
<property name="root" scope="default">
<root xmlns=""/>
</property>
<aggregate id="ELEMENTS">
<completeCondition timeout="12">
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete enclosingElementProperty="root" expression="//resultelement">
[rest of the flow]
</onComplete>
</aggregate>
它工作正常,但是,正如您所看到的,我在聚合器上定义了一个超时,这样超时中的消息就不会被“聚合”,而是会被“重定向”到故障序列。一般来说,任何发送到故障序列的消息都会“错过”聚合器,所以问题是:有什么方法可以将答案和错误聚合在一个消息中?
“B计划”基于在故障序列中创建并使用响应中介器发回的单个错误消息,它可以工作,但如果出现多个错误,我会在ESB的日志中注意到一个空指针异常,我认为这是由于多个进程试图使用响应中介器造成的。
编辑:
我是ESB新手,所以我可能有错误的想法,所以我将试着用一个例子来解释我的情况。我试图创建一个REST API,它将接收如下所示的有效负载:
{
"items" : [
"ID_ITEM_1",
"ID_ITEM_2",
"ID_ITEM_3"
]
}
API配置:
<?xml version="1.0" encoding="UTF-8"?>
<api context="AAA/report" name="order-request" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST" protocol="http">
<inSequence>
<iterate expression="//items" id="ITEMS">
<target>
<sequence>
<property expression="json-eval($.items)" name="item"/>
<call-template description="Get status" target="gov:/calls/GetItemStatusTemplate.xml">
<with-param name="itemId" value="{get-property('item')}"/>
</call-template>
<payloadFactory media-type="json">
<format>
{
"item" : "$1",
"status" : "$2"
}
</format>
<args>
<arg expression="get-property('item')"/>
<arg evaluator="json" expression="$.status"/>
</args>
</payloadFactory>
</sequence>
</target>
</iterate>
<property name="report" scope="default">
<report xmlns=""/>
</property>
<aggregate id="ITEMS">
<completeCondition timeout="12">
<messageCount max="-1" min="-1"/>
</completeCondition>
<onComplete enclosingElementProperty="report" expression="//jsonObject">
<respond/>
</onComplete>
</aggregate>
</inSequence>
<outSequence/>
<faultSequence>
<log level="full">
<property name="FAULT_SEQUENCE" value="IN"/>
</log>
<respond/>
</faultSequence>
</resource>
</api>
<call>
<endpoint>
<address trace="disable" uri="http://something">
<timeout>
<duration>10000</duration>
<responseAction>fault</responseAction>
</timeout>
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<initialDuration>0</initialDuration>
<progressionFactor>1.0</progressionFactor>
<maximumDuration>0</maximumDuration>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</address>
</endpoint>
</call>
{
"status" : "OK"
}
{
"report" : [
{
"item" : "ID_ITEM_1",
"status" : "OK"
},
{
"item" : "ID_ITEM_2",
"status" : "NOT VALID"
},
{
"item" : "ID_ITEM_3",
"status" : "OK"
}
]
}
{
"report" : [
{
"item" : "ID_ITEM_1",
"status" : "OK"
},
{
"item" : "ID_ITEM_2",
"status" : "NOT VALID"
}
]
}
{
"report" : [
{
"item" : "ID_ITEM_1",
"status" : "OK"
},
{
"item" : "ID_ITEM_2",
"status" : "NOT VALID"
},
{
"item" : "ID_ITEM_3",
"status" : "request timeout"
}
]
}
或者注意到客户机在ITEM_3上出现错误的方法
在您的问题中,您要求在聚合中介器中处理“超时”。
将出现如下警告:
WARN - Aggregate Aggregate Mediator Time out occured.
本文向大家介绍C ++中的组合迭代器,包括了C ++中的组合迭代器的使用技巧和注意事项,需要的朋友参考一下 假设我们必须设计一个Iterator类,其中包含少量操作- 定义一个构造函数,该构造函数将以不同的小写英文字母排序的字符串字符和一个数字CombineLength作为参数。 定义一个函数,该函数将按字母顺序返回长度combinationLength的下一个组合。 定义另一个函数,当且仅当存在
问题内容: 我想将多处理池与迭代器一起使用,以便在将迭代器拆分为N个元素的线程中执行函数,直到迭代器完成为止。 我的问题是,此脚本是正确的方法吗?有没有更好的办法? 该脚本可能出了点问题,因为我在 问题答案: 如果我不得不猜测代码的主要问题,那是因为将您的代码传递给了流程函数-工作方式是解压缩传递给它的参数,因此您的函数实际上是获取参数,而不是列出一个参数的元素。这会在过程功能甚至没有机会启动之前
嗨,伙计们,我把这个作为面试问题来回答,但我遇到了麻烦。我熟悉泛型/集合 问题是:所提供的工作区中包含cocI,它是一个类的开始,该类实现了一个迭代器,可用于迭代集合集合。集合集合被传递到类的构造函数中。迭代器应该首先遍历内容深度。 例如,如果集合集合如下所示: 然后迭代器应按以下顺序返回内容:“A”、“B”、“C”、“D”、“E”、“F” Q.在cocI中提供hasNext()和next()方法
6 迭代器模式总结 迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成。由于很多编程语言的类库都已经实现了迭代器模式,因此在实际开发中,我们只需要直接使用Java、C#等语言已定义好的迭代器即可,迭代器已经成为我们操作聚合对象的基本工具之一。 1. 主要优点
5 JDK内置迭代器 为了让开发人员能够更加方便地操作聚合对象,在Java、C#等编程语言中都提供了内置迭代器。在Java集合框架中,常用的List和Set等聚合类都继承(或实现)了java.util.Collection接口,在Collection接口中声明了如下方法(部分): package java.util; public interface Collection<E> e
4 使用内部类实现迭代器 在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目的是访问存储在聚合对象中的数据,以便迭代器能够对这些数据进行遍历操作。 除了使用关联关系外,为了能够让迭代器可以访问到聚合对象中的数据,我们还可以将迭代器类设计为聚合类的内部类,JDK