我正在尝试从休息调用接收 xml 消息,然后调用数据库,将每一行映射到一个对象,然后返回完整的编组对象作为休息响应。
但是,即使在最后一个进程执行之前,我的 db 查询结果也会作为其余响应返回。您能否告知我是否做错了什么导致返回 dB 查询?
还请告知我的解决方案是否是正确的方法,因为真正的数据库查询将有大约 25000 行,我担心我的网络服务超时。
路线:
from("jetty://http://localhost:8888/...")
.log("Message Received")
.setExchangePattern(ExchangePattern.InOut)
.unmarshal(soapMessage)
.removeHeaders("CamelHttp")
.to("direct:ProcessRequest");
from("direct:ProcessRequest")
.setBody(constant("SELECT * FROM table"))
.to("jdbc:dataSource").split(body()).parallelProcessing()
.process(rowProcessor)
.aggregate(constant(true), new ArrayListAggregationStrategy())
.completionFromBatchConsumer()
.process(combinedProcess)
行处理器
RowResult rowResult = new RowResult();
Map<String, Object> row = exchange.getIn().getBody(Map.class);
System.out.println("Processing " + row);
rowResult.setName((String) row.get("name"));
rowResult.setSurname((String) row.get("surname"));
exchange.getIn().setBody(responserowResultDetail);
联合工艺
System.out.println("Bulk process");
People people = new People();
List<rowResult> rowResults = (List<rowResult>)exchange.getIn().getBody();
people.getEveryone().addAll(rowResults);
exchange.getIn().setBody(people);
exchange.getIn().setHeader(Exchange.CONTENT_TYPE, MediaType.APPLICATION_XML);
我从休息响应中得到以下信息:
[{id=1, name = test ...... }]