在mule 3.x中创建完全自定义聚合器的推荐方法是什么?完全自定义,我的意思是根据我自己的逻辑,不使用相关ID,消息计数等。
mulesoft网站上的文档已经过时,说要使用3.x中不存在的AbstractEventAggregator:
http://www.mulesoft.org/documentation/display/MULE3USER/Message+Splitting+and+Aggregatio
深入挖掘,看起来这个类已在3.x中重命名为AbstractAggregator:
http://www.mulesoft.org/docs/site/3.2.0/apidocs/org/mule/routing/AbstractAggregator.html
但是,没有示例显示如何使用它。上面第一个链接中描述的LoanBroker示例实际上使用了一个相关聚合器(在2.x示例中,我假设它是文档所指的内容)。
有一次,有一个抽象类有抽象方法shouldAggregate和doAggregate。这是我想要扩展的课程。
答案 0 :(得分:4)
请查看下面的TestAggregator
以获取AbstractAggregator的子类化示例。
import org.mule.DefaultMuleEvent;
import org.mule.DefaultMuleMessage;
import org.mule.api.MuleContext;
import org.mule.api.MuleEvent;
import org.mule.api.store.ObjectStoreException;
import org.mule.api.transformer.TransformerException;
import org.mule.routing.AbstractAggregator;
import org.mule.routing.AggregationException;
import org.mule.routing.EventGroup;
import org.mule.routing.correlation.CollectionCorrelatorCallback;
import org.mule.routing.correlation.EventCorrelatorCallback;
import org.mule.util.concurrent.ThreadNameHelper;
import java.util.Iterator;
public class TestAggregator extends AbstractAggregator
{
@Override
protected EventCorrelatorCallback getCorrelatorCallback(MuleContext muleContext)
{
return new CollectionCorrelatorCallback(muleContext,false,storePrefix)
{
@Override
public MuleEvent aggregateEvents(EventGroup events) throws AggregationException
{
StringBuffer buffer = new StringBuffer(128);
try
{
for (Iterator<MuleEvent> iterator = events.iterator(); iterator.hasNext();)
{
MuleEvent event = iterator.next();
try
{
buffer.append(event.transformMessageToString());
}
catch (TransformerException e)
{
throw new AggregationException(events, null, e);
}
}
}
catch (ObjectStoreException e)
{
throw new AggregationException(events,null,e);
}
logger.debug("event payload is: " + buffer.toString());
return new DefaultMuleEvent(new DefaultMuleMessage(buffer.toString(), muleContext), events.getMessageCollectionEvent());
}
};
}
}