我试图通过在apache camel的帮助下从csv编组来生成两个文件。 我触发生成的文件通过一个在java类中运行方法的活动mq路由发送一条空消息。 我创建并填充两个列表,然后通过两个直接路由发送以生成两个文件。 第一条路径可以很好地从List创建文件。 第二个路由不会创建任何文件。它记录下面的消息,然后调用三角形文件生成的方法。 只有两个路由之间的差异是发送到直接路由的List的大小,我在将列表发送到路由之前记录(segment:list2csvFullDataRest.size():11379)。
为什么会这样?有什么限制,来自谁?我怎样才能做到这一点?
日志文件:
2014-07-23 16:42:55,305|INFO |SegmentNumbersJob |.SegmentNumbersJob 144|325-1.2.1.SNAPSHOT|segment: list2csvFullDataRest.size() : 11379
[segmentNumberFullDat] [segmentNumberFullDat] [direct://segmentNumbersFullDataRest ] [ 245]
[segmentNumberFullDat] [marshal16 ] [marshal[org.apache.camel.model.dataformat.CsvDataFormat@3808692b] ] [ 245]
[segmentNumberTestRou] [segmentNumberTestRou] [amqNonXA://app.campaign.segmentNumbersJob?asyncConsumer=false&concurrentConsu] [ 55861]
[segmentNumberTestRou] [to95 ] [bean:segmentNumbersJob?method=execute ] [ 55860]
Headers {breadcrumbId=ID:thodoris-pc-53142-1406126515417-1:1:1:1:1, CamelRedelivered=false, CamelRedeliveryCounter=0, JMSCorrelationID=null, JMSDeliveryMode=2, JMSDestination=queue://app.campaign.segmentNumbersJob, JMSExpiration=0, JMSMessageID=ID:thodoris-pc-53142-1406126515417-1:1:1:1:1, JMSPriority=4, JMSRedelivered=false, JMSReplyTo=null, JMSTimestamp=1406126516635, JMSType=null, JMSXGroupID=null, JMSXUserID=null}
2014-07-23 16:42:56,629|INFO |SegmentNumbersJob |.SegmentNumbersJob 66|325-1.2.1.SNAPSHOT|Generating segment reports...
触发方法生成文件的路由:
from("amqNonXA:app.campaign.segmentNumbersJob?concurrentConsumers=1&maxConcurrentConsumers=1&asyncConsumer=false&destination.consumer.prefetchSize=1&transacted=true")
.routeId("segmentNumberTestRoute")
.autoStartup(true)
.inOnly("bean:segmentNumbersJob?method=execute");
将csv作为csv编组并将其作为文件导出的路由:
from("direct:segmentNumbersFullDataRest")
.autoStartup(true)
.marshal().csv()
.end()
类segmentNumbersJob中的代码,其中方法执行是在ProducerTemplate的帮助下将List发送到直接路由
@EndpointInject
private ProducerTemplate segmentNumbersJobSender;
List<Map<String, Object>> list2csvFullDataRest = new ArrayList<Map<String, Object>>();
LOG.info("segment: list2csvFullDataRest.size() : " + list2csvFullDataRest.size());
// this is the code that doesn't execute properly even though a same line with a smaller List does!!!
segmentNumbersJobSender.sendBody("direct:segmentNumbersFullDataRest", list2csvFullDataRest);