簡體   English   中英

Apache Camel在使用setBody插入數據之前進行驗證

[英]Apache Camel validate before insert data with setBody

我有如下的RouteBuilder。

from("seda:requestQueue").routeId("service_request").log(LoggingLevel.INFO, "Processing STARTED,  {body = ${body}")
            .setBody(body())
            .to("select * from SERVICE_REQUEST WHERE requestType=:#TYPE AND requestDate=:#date AND owner=:#OWNER)
            .split(body()).streaming().process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    Map<String, Object> row = exchange.getIn().getBody(Map.class);
                    if (row == null) {
                        LOGGER.info("Request is new. No records found.");
                        return;
                    }
                    //Duplicate request. Q(Not sure how to terminate the process with exception)
                }
            })
            .log(LoggingLevel.INFO, "Processing CONTINUE,  {body = ${body}")
            .setBody(body())
            .to("insert into SERVICE_REQUEST (ID,....) ").log(LoggingLevel.INFO, "Processing COMPLETED").end();

我想實現

  1. 無論何時提交請求(現在通過SEDA提交),首先都要檢查數據庫中是否存在相同的請求。
  2. 如果不可用,則僅插入數據庫(新行)

問題:1.如何將原始請求正文設置為insertQuery? 按照上面的代碼,在seda:requestQueue收到的正文不可用於(“插入SERVICE ...)。

您的拆分器將發送帶有新正文的消息(基於SQL)。 因此,身體本身無法使用。

而是,在調用拆分器之前,將主體設置為Exchange的屬性。 然后,當您需要使用它時,請讀取該屬性的值。

.setProperty("mySampleProperty", simple("${body}")

如果需要將其作為正文,則在那時-將正文設置為先前存儲在Exchange屬性中的值。

這是一個類似的問題: Apache Camel:如何存儲變量以備后用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM