gpt4 book ai didi

java - Camel Rest 到 dB 查询,返回错误响应

转载 作者:行者123 更新时间:2023-12-02 01:13:49 26 4
gpt4 key购买 nike

我试图从休息调用接收 xml 消息,然后调用数据库,将每一行映射到一个对象中,然后返回完整的编码对象作为休息响应。

但是,即使在最后一个进程执行之前,我的数据库查询结果也会作为其余响应返回。如果我做错了什么导致返回 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 ...... }]

最佳答案

我认为您的 direct:ProcessRequest 线程正在做它应该做的事情 - 即它正在返回进入拆分的内容,因为您没有链接到拆分的聚合策略。我认为你需要做的是进行拆分来进行聚合,然后它就会起作用。我还没有测试过这个,但我认为你需要这样的东西:

    from("direct:ProcessRequest")
.setBody(constant("SELECT * FROM table"))
.to("jdbc:dataSource")
.split(body(), new ArrayListAggregationStrategy() )
.parallelProcessing()
.process(rowProcessor)
.end()
.completionFromBatchConsumer()
.process(combinedProcess)

关于java - Camel Rest 到 dB 查询,返回错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com