camel-jms using spring jms does not support batch for transactions. Its consuming a single message at a time.
camel-sjms has batch support on the consumer. You may take a look at http://camel.apache.org/sjms On Fri, Dec 6, 2013 at 2:36 AM, kraythe . <[email protected]> wrote: > I have a route that I will past below. The route is transacted and I want > it to read off a queue and then batch the records into a file. However, if > someone murders the server with kill -9 prior to the file being written, I > would like all of those records to end up back in the queue to be processed > next time the server goes up. That is not the behavior we are seeing. If we > kill the server any records in transit are gobbled and dropped and the file > not written. What are we doing wrong? Note this is a method that generates > routes for us when we call it. Thanks a bunch: > > protected void publishExcelFileForRecordQueue(final String queue, > finalString routeID, > final String path, > > final long batchcompletionTimeout, final Comparator<Record> sorter, > final MappedExcelDataFormat medf, final String fileNameExpr) { > > from(endpointAMQ(queue)) // Consume routed cases > > .routeId(routeID) // Route Id for this route. > > > .onException(Exception.class).useOriginalMessage().handled(true).maximumRedeliveries(0) > // catch exceptions > > .setHeader(Exchange.FAILURE_ROUTE_ID, property(Exchange. > FAILURE_ROUTE_ID)) // set route that errored > > .setHeader(Exchange.EXCEPTION_CAUGHT, simple( > "${exception.stacktrace}")) // Store reason for error > > .to(ExchangePattern.InOnly, > endpointAMQ(QUEUE_CASE_AUTOMATION_DEAD)).end() > // to DLQ > > .transacted(KEY_TXPOLICY_REQUIRED) // make the route transacted > > .unmarshal(new JacksonDataFormat(this.jacksonMapper, Record.class)) // > unmarshal from JSON > > .aggregate(constant(true), newRecordListAggregationStrategy(sorter)) > // > Aggregate and sort records. > > .completionTimeout(batchcompletionTimeout) // Make as single report > > .marshal(medf) // Write the agregated exchanges to excel > > .to("file:" + path + "?fileName=" + fileNameExpr + > "&tempPrefix=.medf.").id("file_writer") // write the data to the file. > > .end(); > > } > > } > > *Robert Simmons Jr. MSc. - Lead Java Architect @ EA* > *Author of: Hardcore Java (2003) and Maintainable Java (2012)* > *LinkedIn: **http://www.linkedin.com/pub/robert-simmons/40/852/a39 > <http://www.linkedin.com/pub/robert-simmons/40/852/a39>* -- Claus Ibsen ----------------- Red Hat, Inc. Email: [email protected] Twitter: davsclaus Blog: http://davsclaus.com Author of Camel in Action: http://www.manning.com/ibsen
