[英]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.如何將原始請求正文設置為insertQuery? 按照上面的代碼,在seda:requestQueue收到的正文不可用於(“插入SERVICE ...)。
您的拆分器將發送帶有新正文的消息(基於SQL)。 因此,身體本身無法使用。
而是,在調用拆分器之前,將主體設置為Exchange的屬性。 然后,當您需要使用它時,請讀取該屬性的值。
.setProperty("mySampleProperty", simple("${body}")
如果需要將其作為正文,則在那時-將正文設置為先前存儲在Exchange屬性中的值。
這是一個類似的問題: Apache Camel:如何存儲變量以備后用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.