0

我正在尝试从休息调用接收 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 ...... }]
4

1 回答 1

0

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

    from("direct:ProcessRequest")
       .setBody(constant("SELECT * FROM table"))
       .to("jdbc:dataSource")
       .split(body(), new ArrayListAggregationStrategy() )
           .parallelProcessing()
           .process(rowProcessor)
       .end()
       .completionFromBatchConsumer()
       .process(combinedProcess)
于 2019-08-27T13:03:50.010 回答